hiti android
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
public class AndroidApp {
private String name;
private String app_url;
private String logo;
private String banner;
private String pkg;
private String scheme;
private String publisher;
private String subtitle;
// Getters and Setters
}
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.AppViewHolder> {
private List<AndroidApp> appList;
public AppAdapter(List<AndroidApp> appList) {
this.appList = appList;
}
@Override
public AppViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app, parent, false);
return new AppViewHolder(view);
}
@Override
public void onBindViewHolder(AppViewHolder holder, int position) {
AndroidApp app = appList.get(position);
// Bind the decrypted data to the views
holder.nameTextView.setText(app.getName());
holder.subtitleTextView.setText(app.getSubtitle());
// Load images (e.g., using Glide or Picasso)
// Glide.with(holder.itemView.getContext()).load(app.getLogo()).into(holder.logoImageView);
}
@Override
public int getItemCount() {
return appList.size();
}
public static class AppViewHolder extends RecyclerView.ViewHolder {
TextView nameTextView;
TextView subtitleTextView;
ImageView logoImageView;
public AppViewHolder(View itemView) {
super(itemView);
nameTextView = itemView.findViewById(R.id.app_name);
subtitleTextView = itemView.findViewById(R.id.app_subtitle);
logoImageView = itemView.findViewById(R.id.app_logo);
}
}
}
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.AppViewHolder> {
private List<AndroidApp> appList;
public AppAdapter(List<AndroidApp> appList) {
this.appList = appList;
}
@Override
public AppViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app, parent, false);
return new AppViewHolder(view);
}
@Override
public void onBindViewHolder(AppViewHolder holder, int position) {
AndroidApp app = appList.get(position);
// Bind the decrypted data to the views
holder.nameTextView.setText(app.getName());
holder.subtitleTextView.setText(app.getSubtitle());
// Load images (e.g., using Glide or Picasso)
// Glide.with(holder.itemView.getContext()).load(app.getLogo()).into(holder.logoImageView);
}
@Override
public int getItemCount() {
return appList.size();
}
public static class AppViewHolder extends RecyclerView.ViewHolder {
TextView nameTextView;
TextView subtitleTextView;
ImageView logoImageView;
public AppViewHolder(View itemView) {
super(itemView);
nameTextView = itemView.findViewById(R.id.app_name);
subtitleTextView = itemView.findViewById(R.id.app_subtitle);
logoImageView = itemView.findViewById(R.id.app_logo);
}
}
}
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private AppAdapter appAdapter;
private List<AndroidApp> appList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set up RecyclerView
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// Set up the adapter with an empty list initially
appAdapter = new AppAdapter(appList);
recyclerView.setAdapter(appAdapter);
// Fetch the data from the API
fetchData();
}
private void fetchData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://d1vzrdgjzuhzv7.cloudfront.net/")
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
Call<ApiResponse> call = apiService.getAndroidApps();
call.enqueue(new Callback<ApiResponse>() {
@Override
public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {
if (response.isSuccessful()) {
List<AndroidApp> androidApps = response.body().getAndroidApps();
// Decrypt the data here
for (AndroidApp app : androidApps) {
try {
String secretKey = "TestHashKey";
app.setName(BlowfishDecryptor.decrypt(app.getName(), secretKey));
app.setApp_url(BlowfishDecryptor.decrypt(app.getApp_url(), secretKey));
// Repeat for other fields
} catch (Exception e) {
e.printStackTrace();
}
}
// Update the RecyclerView with the new data
appList.clear();
appList.addAll(androidApps);
appAdapter.notifyDataSetChanged();
}
}
@Override
public void onFailure(Call<ApiResponse> call, Throwable t) {
Log.e("API Error", "Failed to fetch data: " + t.getMessage());
}
});
}
}
import retrofit2.Call;
import retrofit2.http.GET;
public interface ApiService {
@GET("fullscreen/bundle/779363139b5863e7865adb8b925a2ce18ad.json")
Call<ApiResponse> getAndroidApps();
}
import java.util.List;
public class ApiResponse {
private List<AndroidApp> androidApps;
public List<AndroidApp> getAndroidApps() {
return androidApps;
}
public void setAndroidApps(List<AndroidApp> androidApps) {
this.androidApps = androidApps;
}
}
item_app
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<ImageView
android:id="@+id/app_logo"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginEnd="8dp"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher_foreground"
android:contentDescription="App Logo"/>
<TextView
android:id="@+id/app_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="App Name"
android:textStyle="bold"
android:layout_toEndOf="@id/app_logo"/>
<TextView
android:id="@+id/app_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="App Subtitle"
android:layout_toEndOf="@id/app_logo"/>
</androidx.constraintlayout.widget.ConstraintLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
