package com.uiui.os.activity; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Color; import android.os.IBinder; import android.os.RemoteException; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.viewpager.widget.ViewPager; import com.alarmclock.uiui.IAlarmAidlInterface; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.uiui.os.BuildConfig; import com.uiui.os.R; import com.uiui.os.base.BaseActivity; import com.uiui.os.bean.AlarmItem; import com.uiui.os.bean.BaseResponse; import com.uiui.os.fragment.AppListFragment; import com.uiui.os.fragment.BaseFragmentPagerAdapter; import com.uiui.os.fragment.CustomFragment; import com.uiui.os.network.NetInterfaceManager; import com.uiui.os.service.MainService; import com.uiui.os.utils.APKUtils; import com.uiui.os.utils.AppUsedTimeUtils; import com.uiui.os.utils.Utils; import com.uiui.os.view.ScaleCircleNavigator; import net.lucode.hackware.magicindicator.MagicIndicator; import net.lucode.hackware.magicindicator.ViewPagerHelper; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class MainActivity extends BaseActivity { private String TAG = MainActivity.class.getSimpleName(); @BindView(R.id.viewPager) ViewPager viewPager; @BindView(R.id.magicIndicator) MagicIndicator magicIndicator; private FragmentManager fragmentManager; private FragmentTransaction fragmentTransaction; private BaseFragmentPagerAdapter adapter; private List fragments; private CustomFragment customFragment; @Override public int getLayoutId() { return R.layout.activity_main; } @Override public void initView() { ButterKnife.bind(this); fragmentManager = getSupportFragmentManager(); fragmentTransaction = fragmentManager.beginTransaction(); fragments = new ArrayList<>(); adapter = new BaseFragmentPagerAdapter(fragmentManager, fragments); // fragmentTransaction.add(R.id.viewPager, appListFragment); // fragmentTransaction.commit(); customFragment = new CustomFragment(); mAlarmServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.e(TAG, "onServiceConnected: "); mIAlarmAidlInterface = IAlarmAidlInterface.Stub.asInterface(service); getAlarmData(); } @Override public void onServiceDisconnected(ComponentName name) { Log.e(TAG, "onServiceDisconnected: "); mIAlarmAidlInterface = null; } }; bindAlarmService(); } private void getAlarmData() { if (mIAlarmAidlInterface == null) { bindAlarmService(); return; } try { String json = mIAlarmAidlInterface.getAlarm(); Log.e(TAG, "onServiceConnected: " + json); if ("暂无闹钟".equalsIgnoreCase(json) || TextUtils.isEmpty(json)) { customFragment.setAlarmItem(null); return; } Type type = new TypeToken>() { }.getType(); List alarmItem = new Gson().fromJson(json, type); customFragment.setAlarmItem(alarmItem); } catch (RemoteException e) { e.printStackTrace(); } } private ServiceConnection mAlarmServiceConnection; private IAlarmAidlInterface mIAlarmAidlInterface; private void bindAlarmService() { if (mIAlarmAidlInterface == null) { //这是连接aidl服务的代码 Intent intent = new Intent(); intent.setAction("com.alarmclock.uiui.IAlarmAidlInterface"); intent.setPackage("com.alarmclock.uiui"); intent.setComponent(new ComponentName("com.alarmclock.uiui", "com.alarmclock.uiui.AIDLAlarmService")); bindService(intent, mAlarmServiceConnection, Context.BIND_AUTO_CREATE); } else { } } private final static int APP_LIST_SIZE = 12; @Override public void initData() { registmNewAppReceiver(); registerSOSNumberReceiver(); fragments.add(customFragment); ArrayList applicationInfoList = APKUtils.queryFilterAppInfo(this); int x = 0; for (int i = 0; i <= applicationInfoList.size(); i++) { if (i != 0 && i % APP_LIST_SIZE == 0) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); fragments.add(appListFragment); x = i; } else if (i == applicationInfoList.size()) { AppListFragment appListFragment = new AppListFragment(); fragments.add(appListFragment); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); } } viewPager.setAdapter(adapter); ScaleCircleNavigator scaleCircleNavigator = new ScaleCircleNavigator(this); scaleCircleNavigator.setCircleCount(fragments.size()); scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY); scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY); scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() { @Override public void onClick(int index) { } }); magicIndicator.setNavigator(scaleCircleNavigator); ViewPagerHelper.bind(magicIndicator, viewPager); if (fragments.size() > 1) { viewPager.setCurrentItem(1); } } private void addData() { List fragmentList = new ArrayList<>(); ArrayList applicationInfoList = APKUtils.queryFilterAppInfo(this); int x = 0; for (int i = 0; i <= applicationInfoList.size(); i++) { if (i != 0 && i % APP_LIST_SIZE == 0) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); fragmentList.add(appListFragment); x = i; } else if (i == applicationInfoList.size()) { AppListFragment appListFragment = new AppListFragment(); fragmentList.add(appListFragment); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); } } for (int i = 1; i <= fragmentList.size(); i++) { if (fragments.get(i) != null) { adapter.replaceFragment(i, fragmentList.get(i - 1)); fragments.remove(i); fragments.add(i, fragmentList.get(i - 1)); } else { adapter.addFragment(fragmentList.get(i - 1)); fragments.add(fragmentList.get(i - 1)); } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { return false; } return super.onKeyDown(keyCode, event); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.e(TAG, "onNewIntent: " + intent.getAction()); String action = intent.getAction(); if (TextUtils.isEmpty(action)) { return; } switch (action) { default: break; case Intent.ACTION_MAIN: viewPager.setCurrentItem(1); break; } } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override protected void onDestroy() { super.onDestroy(); if (mNewAppReceiver != null) { unregisterReceiver(mNewAppReceiver); } } @Override protected void onStart() { super.onStart(); AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID); AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); getAlarmData(); } @Override protected void onResume() { super.onResume(); SendRunningApp(MainActivity.this); } private void SendRunningApp(Context context) { AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID); AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); long time = AppUsedTimeUtils.getInstance().getStartTime(); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("app_package", BuildConfig.APPLICATION_ID); jsonObject.addProperty("version_name", APKUtils.getAPPVersionName(context, BuildConfig.APPLICATION_ID)); jsonObject.addProperty("start_time", time / 1000); String jsonString = jsonObject.toString(); Log.e(TAG, "SendRunningApp: " + jsonString); NetInterfaceManager.getInstance() .getRunningAppObservable(jsonString) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { Log.e("SendRunningApp", "onSubscribe: "); } @Override public void onNext(BaseResponse baseResponse) { Log.e("SendRunningApp", "onSubscribe: " + baseResponse); } @Override public void onError(Throwable e) { Log.e("SendRunningApp", "onError: " + e.getMessage()); onComplete(); } @Override public void onComplete() { Log.e("SendRunningApp", "onComplete: "); } }); } @Override protected void onRestart() { super.onRestart(); AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis()); String packagename = AppUsedTimeUtils.getInstance().getAppPackageName(); Log.e(TAG, "onRestart packagename == " + packagename); if (!TextUtils.isEmpty(packagename)) { Log.e(TAG, "onRestart: " + APKUtils.getAppNameByPackage(MainActivity.this, packagename)); Log.e(TAG, "onRestart: " + packagename); NetInterfaceManager.getInstance().getAppUsageRecordControl() .sendappUsageRecord(Utils.getSerial(), APKUtils.getAppNameByPackage(MainActivity.this, packagename), packagename, AppUsedTimeUtils.getInstance().getStartTime() / 1000, AppUsedTimeUtils.getInstance().getEndTime() / 1000) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { Log.e("sendappUsageRecord", "onSubscribe: "); } @Override public void onNext(BaseResponse baseResponse) { Log.e("sendappUsageRecord", "onNext: " + baseResponse); } @Override public void onError(Throwable e) { Log.e("sendappUsageRecord", "onError: " + e.getMessage()); onComplete(); } @Override public void onComplete() { Log.e("sendappUsageRecord", "onComplete: "); } }); } else { Log.e("onRestart", "app = null" + packagename); } } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis()); } private void registmNewAppReceiver() { mNewAppReceiver = new NewAppReceiver(); IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); filter.addAction(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REPLACED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addDataScheme("package"); registerReceiver(mNewAppReceiver, filter); } private NewAppReceiver mNewAppReceiver; class NewAppReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.e(TAG, "onReceive: " + action); if (Intent.ACTION_PACKAGE_ADDED.equals(action) || Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) { addData(); } } } private SOSNumberReceiver sosNumberReceiver; private void registerSOSNumberReceiver() { if (sosNumberReceiver == null) { sosNumberReceiver = new SOSNumberReceiver(); } IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); filter.addAction("setting_sos"); registerReceiver(sosNumberReceiver, filter); } class SOSNumberReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.e(TAG, "onReceive: " + intent.getAction()); String setting_sos = intent.getStringExtra("setting_sos"); if (TextUtils.isEmpty(setting_sos)) return; customFragment.setSosNumber(); } } }