Friday, October 18, 2024

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>