feat: 增加壁纸显示,增加天气事件分发,增加HotSeat
This commit is contained in:
162
app/src/main/java/com/ttstd/dialer/adapter/AppGridAdapter.java
Normal file
162
app/src/main/java/com/ttstd/dialer/adapter/AppGridAdapter.java
Normal file
@@ -0,0 +1,162 @@
|
||||
package com.ttstd.dialer.adapter;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
|
||||
import com.shehuan.niv.NiceImageView;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.ttstd.dialer.R;
|
||||
import com.ttstd.dialer.config.CommonConfig;
|
||||
import com.ttstd.dialer.db.app.AppInfo;
|
||||
import com.ttstd.dialer.fragment.dialog.shortcut.ShortcutDialogFagment;
|
||||
import com.ttstd.dialer.utils.ApkUtils;
|
||||
import com.ttstd.dialer.utils.Logger;
|
||||
import com.ttstd.iconloader.IconCacheManager;
|
||||
import com.ttstd.iconloader.IconLoader;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AppGridAdapter extends BaseAdapter implements LoaderManager.LoaderCallbacks<Drawable> {
|
||||
private static final String TAG = "AppGridAdapter";
|
||||
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
private FragmentActivity mContext;
|
||||
private LoaderManager mLoaderManager;
|
||||
private IconCacheManager mIconCacheManager = IconCacheManager.getInstance();
|
||||
private List<AppInfo> mAppInfos;
|
||||
|
||||
public AppGridAdapter(FragmentActivity context, LoaderManager loaderManager) {
|
||||
mContext = context;
|
||||
mLoaderManager = loaderManager;
|
||||
}
|
||||
|
||||
public void setAppInfos(List<AppInfo> appInfos) {
|
||||
mAppInfos = appInfos;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public interface ShortcutCallback {
|
||||
void setAppInside(AppInfo appInfo);
|
||||
}
|
||||
|
||||
private ShortcutCallback mShortcutCallback;
|
||||
|
||||
public void setShortcutCallback(ShortcutCallback shortcutCallback) {
|
||||
mShortcutCallback = shortcutCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mAppInfos == null ? 0 : mAppInfos.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return mAppInfos == null ? null : mAppInfos.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
ViewHolder holder;
|
||||
if (convertView == null) {
|
||||
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_grid_app, parent, false);
|
||||
holder = new ViewHolder();
|
||||
holder.root = convertView.findViewById(R.id.root);
|
||||
holder.iv_icon = convertView.findViewById(R.id.iv_icon);
|
||||
holder.tv_app_name = convertView.findViewById(R.id.tv_app_name);
|
||||
convertView.setTag(holder);
|
||||
} else {
|
||||
holder = (ViewHolder) convertView.getTag();
|
||||
}
|
||||
|
||||
AppInfo appInfo = mAppInfos.get(position);
|
||||
Drawable drawable = mIconCacheManager.getIcon(appInfo.getComponentName().flattenToShortString());
|
||||
if (drawable != null) {
|
||||
holder.iv_icon.setImageDrawable(drawable);
|
||||
} else {
|
||||
mLoaderManager.restartLoader(position, null, this).forceLoad();
|
||||
}
|
||||
holder.tv_app_name.setText(appInfo.getLabel());
|
||||
|
||||
holder.root.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
ApkUtils.openApp(mContext, appInfo.getComponentName());
|
||||
}
|
||||
});
|
||||
|
||||
holder.root.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
ShortcutDialogFagment shortcutDialogFagment = new ShortcutDialogFagment(appInfo);
|
||||
shortcutDialogFagment.setTitil("温馨提示");
|
||||
shortcutDialogFagment.setTips("是否将应用放入更多应用");
|
||||
shortcutDialogFagment.setOnClickListener(new ShortcutDialogFagment.OnClickListener() {
|
||||
@Override
|
||||
public void onPositiveClick() {
|
||||
if (mShortcutCallback != null)
|
||||
mShortcutCallback.setAppInside(appInfo);
|
||||
shortcutDialogFagment.dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNegativeClick() {
|
||||
shortcutDialogFagment.dismiss();
|
||||
}
|
||||
});
|
||||
shortcutDialogFagment.show(mContext.getSupportFragmentManager(), "ShortcutDialogFagment");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@NotNull
|
||||
@Override
|
||||
public Loader<Drawable> onCreateLoader(int id, @Nullable @org.jetbrains.annotations.Nullable Bundle args) {
|
||||
AppInfo appInfo = mAppInfos.get(id);
|
||||
ComponentName componentName = appInfo.getComponentName();
|
||||
return new IconLoader(mContext, componentName, mIconCacheManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(@NonNull @NotNull Loader<Drawable> loader, Drawable data) {
|
||||
int position = loader.getId();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(@NonNull @NotNull Loader<Drawable> loader) {
|
||||
Logger.e(TAG, "onLoaderReset: ");
|
||||
}
|
||||
|
||||
static class ViewHolder {
|
||||
ConstraintLayout root;
|
||||
NiceImageView iv_icon;
|
||||
TextView tv_app_name;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user