diff --git a/app/build.gradle b/app/build.gradle index 666eaad..d8592ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { defaultConfig { applicationId "com.aoleyun.sn" - versionCode 88 - versionName "6.4.8" + versionCode 94 + versionName "6.5.4" //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 24 @@ -112,7 +112,7 @@ android { v2SigningEnabled true } - G10P{ + G10P { storeFile file("keystore/G10PMTK11.jks") storePassword "123456" keyAlias "G10PMTK11" @@ -121,7 +121,7 @@ android { v2SigningEnabled true } - G10PUserDebug{ + G10PUserDebug { storeFile file("keystore/G10PUserDebug.jks") storePassword "123456" keyAlias "G10PUserDebug" @@ -130,7 +130,7 @@ android { v2SigningEnabled true } - zhanruiG10Z{ + zhanruiG10Z { storeFile file("keystore/zhanruiG10Z.keystore") storePassword "123456" keyAlias "zhanruiG10Z" @@ -183,6 +183,20 @@ android { } buildTypes { + c2Debug.initWith(debug) + c2Debug { + versionNameSuffix "-debug" + debuggable true + signingConfig signingConfigs.teclast8183 + buildConfigField "String", "platform", '"MTK8183"' + } + + c2Release.initWith(release) + c2Release { + signingConfig signingConfigs.teclast8183 + buildConfigField "String", "platform", '"MTK8183"' + } + teclast8183Debug.initWith(debug) teclast8183Debug { versionNameSuffix "-debug" @@ -384,6 +398,7 @@ dependencies { compileOnly files('libs/framework.jar') compileOnly files('libs/cube_mdm.jar') compileOnly files('libs/cube_sdk_v1.0.0.jar') + implementation files('libs/ebf_tools_v1.0.jar') implementation files('libs/vendor.mediatek.hardware.nvram-V1.0-java.jar') implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/app/keystore/P22.keystore b/app/keystore/P22.keystore new file mode 100644 index 0000000..8141613 Binary files /dev/null and b/app/keystore/P22.keystore differ diff --git a/app/libs/ebf_tools_v1.0.jar b/app/libs/ebf_tools_v1.0.jar new file mode 100644 index 0000000..f0dbe1d Binary files /dev/null and b/app/libs/ebf_tools_v1.0.jar differ diff --git a/app/libs/接口说明.txt b/app/libs/接口说明.txt new file mode 100644 index 0000000..d442f19 --- /dev/null +++ b/app/libs/接口说明.txt @@ -0,0 +1,118 @@ +一:对接方式: aidl + 1.导入jar包依赖 + 2.绑定aidl服务: + Intent intent = new Intent("com.kte.interfacesettings.aidl"); + intent.setPackage("com.kte.interfacesettings"); + context.bindService(intent, aidlConnection, Context.BIND_AUTO_CREATE); + 3.解绑服务: + unbindService(mConnection); + +二:接口说明 + // 启用/禁用MTP数据传输功能 : + void setMtpEnable(boolean enable); + + // 启用/禁用Camera功能 : + void setCameraEnable(boolean enable); + + // 启用/禁用蓝牙功能 : + void setBluetoothEnable(boolean enable); + + // 启用/禁用wifi : + void setWifiAdvanceEnable(boolean enable); + + + // 设置默认浏览器: + void setDefaultBrowser(String packageName); + + + // 关机功能: + void shutdownDevice(); + + + // 睡眠/唤醒功能(熄屏亮屏): + void lockNow(boolean on); + + + // 设置背光亮度(屏幕亮度-1,0-255 ): + void setBackLightBrightness(int brightness); + + // 禁用/启用 飞行模式: + void setAirplaneDisable(boolean disable); + + // 重启功能: + void rebootDevice(); + + // 清除最近任务: + void clearRecentTask(); + + // 清除应用数据: + void clearAppData(String packageName); + + // 恢复出厂设置: + void wipeData(); + + + // 静默安装apk功能 + void silentInstall(String path,boolean autoLa); + + // 静默卸载apk功能 + void silentUninstall(String pkgName); + + + // 获取硬件MAC地址: + String getMACaddress(); + + + // 静默截图功能(截屏) + Bitmap captureScreen(String savePath); + + + // 设置默认输入法 + boolean setDefaultInputMethod(String ime); + + // 设置默认播放器 + boolean setDefaultVideoPlayer(String packageName,String className); + + // 获取root状态 + boolean isRooted(); + + // 设置锁屏壁纸 + void setLockWallPaper(String filePath); + + // 显示/隐藏下拉状态栏图标 + void showNotificationItems(int item, boolean visible); + + // 显隐系统设置项: + void setSettingOptionGoneorVisible(int item ,boolean visible); + + + // 获取当前所有正在运行的第三方应用进程接口 + List getThirdAppPkgList(); + + /** + * 打开/关闭护眼模式(夜间模式) + * @param state + * true 关闭;false 打开;默认是关闭状态; + **/ + void setProtectEyeModeClosed(boolean state); + + /** + * 获取护眼模式状态(夜间模式) + * @return state + * true 打开;false 关闭; + **/ + boolean getProtectEyeMode(); + + /** + * 打开/关闭阅读模式(黑白屏) + * @param state + * true 关闭;false 打开;默认是关闭状态; + **/ + void setReaderModeClosed(boolean state); + + /** + * 获取阅读模式(黑白屏) + * @return state + * true 打开;false 关闭; + **/ + boolean getReaderMode(); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ec1fd8c..4d1b93d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,7 +25,6 @@ - @@ -36,98 +35,69 @@ - - - + android:maxSdkVersion="23" /> - - + - - + tools:ignore="ProtectedPermissions" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - - - + + @@ -142,7 +112,8 @@ android:theme="@style/AppTheme"> + android:exported="true" + android:screenOrientation="userPortrait"> @@ -157,21 +128,35 @@ android:launchMode="singleInstance" android:screenOrientation="userLandscape" android:theme="@style/AppTheme"> - + + + + + + + + - - - - + + + + + + - - - + - - + android:process=":remote" /> - - + android:required="false" /> @@ -331,33 +310,28 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - + android:value="bQxx6zC6AvZ6O41UUPYq6X1LsQuC36dh" /> - + android:value="333598267" /> diff --git a/app/src/main/java/com/aoleyun/sn/activity/CleanupActivity.java b/app/src/main/java/com/aoleyun/sn/activity/CleanupActivity.java new file mode 100644 index 0000000..7a55e65 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/CleanupActivity.java @@ -0,0 +1,50 @@ +package com.aoleyun.sn.activity; + +import android.view.View; +import android.widget.TextView; + +import com.aoleyun.sn.R; +import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.utils.JGYUtils; +import com.aoleyun.sn.utils.ToastUtil; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class CleanupActivity extends BaseActivity { + + @BindView(R.id.tv_clean) + TextView tv_clean; + + /** + * 设置布局 + */ + @Override + public int getLayoutId() { + return R.layout.activity_cleanup; + } + + /** + * 初始化视图 + */ + @Override + public void initView() { + ButterKnife.bind(this); + tv_clean.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + JGYUtils.getInstance().cleanBackgroundMemory(); + ToastUtil.show("清理完成"); + finish(); + } + }); + } + + /** + * 初始化数据 + */ + @Override + public void initData() { + + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java index 5e3c7d4..dddc957 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java @@ -40,9 +40,11 @@ import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.dialog.UpdateDialog; import com.aoleyun.sn.service.main.MainService; +import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SPUtils; import com.aoleyun.sn.utils.SysSettingUtils; +import com.aoleyun.sn.utils.TimeUtils; import com.aoleyun.sn.utils.ToastUtil; import com.aoleyun.sn.utils.Utils; import com.blankj.utilcode.util.NetworkUtils; @@ -76,28 +78,22 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, ImageView back; @BindView(R.id.tv_version) TextView tv_version; - @BindView(R.id.bt_update) - Button bt_update; + @BindView(R.id.tv_activation_time) + TextView tv_activation_time; + @BindView(R.id.iv_update) + ImageView iv_update; + @BindView(R.id.iv_active_state) + ImageView iv_active_state; @BindView(R.id.iv_head) ImageView iv_head; @BindView(R.id.tv_name) TextView tv_name; @BindView(R.id.tv_batch) TextView tv_batch; - @BindView(R.id.cl_student) - ConstraintLayout cl_student; @BindView(R.id.tv_number) TextView tv_number; - @BindView(R.id.cl_serial) - ConstraintLayout cl_serial; - @BindView(R.id.cl_class) - ConstraintLayout cl_class; @BindView(R.id.tv_class) TextView tv_class; - @BindView(R.id.cl_number_name) - ConstraintLayout cl_number_name; - @BindView(R.id.tv_number_name) - TextView tv_number_name; @BindView(R.id.tv_model) TextView tv_model; @BindView(R.id.cl_ota) @@ -105,19 +101,6 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, @BindView(R.id.tv_system_version) TextView tv_system_version; - @BindView(R.id.tv_battery) - TextView tv_battery; - @BindView(R.id.tv_voltage) - TextView tv_voltage; - @BindView(R.id.tv_wifi) - TextView tv_wifi; - @BindView(R.id.tv_signal) - TextView tv_signal; - @BindView(R.id.tv_ip) - TextView tv_ip; - @BindView(R.id.tv_public_ip) - TextView tv_public_ip; - @BindView(R.id.tv_serial) TextView tv_serial; @BindView(R.id.tv_imei) @@ -190,31 +173,19 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, mMainAPresenter.setLifecycle(lifecycleSubject); JGYUtils.startServices(MainActivity.this); getDevicesInfo(); - if (Utils.isWifiAvailable(MainActivity.this)) { - tv_signal.setText(Utils.obtainWifiInfo(MainActivity.this) + "dbm"); - } else { - tv_signal.setText("未连接"); - } if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.AH6016Platform) { - cl_student.setVisibility(View.GONE); - cl_serial.setVisibility(View.VISIBLE); - cl_class.setVisibility(View.GONE); - cl_number_name.setVisibility(View.VISIBLE); String sn = Utils.getSn(); if (!TextUtils.isEmpty(sn)) { if (sn.length() > 4) { - tv_number_name.setText(sn.substring(sn.length() - 4)); +// tv_number_name.setText(sn.substring(sn.length() - 4)); } else { - tv_number_name.setText(sn); +// tv_number_name.setText(sn); } } } else { - cl_student.setVisibility(View.VISIBLE); - cl_serial.setVisibility(View.GONE); - cl_class.setVisibility(View.VISIBLE); - cl_number_name.setVisibility(View.GONE); + } - bt_update.setOnClickListener(new View.OnClickListener() { + iv_update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this, UpdateActivity.class)); @@ -369,12 +340,8 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, public void setLockedState(boolean loocked) { Log.e(TAG, "setLockedState: " + loocked); if (loocked) { -// iv_locked.setVisibility(View.VISIBLE); -// iv_locked.setImageDrawable(getDrawable(R.drawable.locked)); mMainAPresenter.getStudesInfo(); } else { -// iv_locked.setVisibility(View.VISIBLE); -// iv_locked.setImageDrawable(getDrawable(R.drawable.unlock)); setNumberText("", View.GONE); setNameText("", View.GONE); setClassText("", View.GONE); @@ -393,8 +360,12 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, @Override public void setStudesInfo(StudentsInfo studesInfo) { if (studesInfo == null) { + iv_active_state.setImageDrawable(getDrawable(R.drawable.icon_inactivated)); return; } + iv_active_state.setImageDrawable(getDrawable(R.drawable.icon_activated)); + long activation_time = studesInfo.getActivation_time(); + tv_activation_time.setText("激活时间:" + TimeUtils.getActivationTime(activation_time)); int trade_type = studesInfo.getTrade_type(); String sno = studesInfo.getSno(); String realname = studesInfo.getRealname(); @@ -409,7 +380,6 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, tv_bind_status.setText("未绑定"); } - settradeType(trade_type); if (TextUtils.isEmpty(sno)) { setNumberText("未设置", View.GONE); @@ -457,7 +427,6 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, @Override public void setPublicIp(String ip) { Log.e(TAG, "setPublicIp: " + ip); - tv_public_ip.setText(ip); mMainAPresenter.checkAoleyunUpdate(); } @@ -702,7 +671,7 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, switch (intent.getAction()) { case WifiManager.RSSI_CHANGED_ACTION: int rssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -1); - tv_signal.setText(rssi + "dBm"); +// tv_signal.setText(rssi + "dBm"); //这函数可以计算出信号的等级 int strength = WifiManager.calculateSignalLevel(rssi, 5); Log.e(TAG, "wifi信号强度变化"); @@ -712,16 +681,16 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) { Log.e(TAG, getString(R.string.wifi_disconnected)); - tv_wifi.setText(getString(R.string.wifi_disconnected)); - tv_signal.setText(""); - tv_ip.setText(getString(R.string.unknown)); +// tv_wifi.setText(getString(R.string.wifi_disconnected)); +// tv_signal.setText(""); +// tv_ip.setText(getString(R.string.unknown)); } else if (info.getState().equals(NetworkInfo.State.CONNECTED)) { WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); //获取当前wifi名称 String newSSID = wifiInfo.getSSID(); - tv_wifi.setText(newSSID); - tv_ip.setText(Formatter.formatIpAddress(wifiInfo.getIpAddress())); +// tv_wifi.setText(newSSID); +// tv_ip.setText(Formatter.formatIpAddress(wifiInfo.getIpAddress())); setMac(); Log.e(TAG, "连接到网络 " + newSSID); } @@ -765,9 +734,9 @@ public class MainActivity extends BaseActivity implements MainAContact.MainView, int level = intent.getIntExtra(EXTRA_LEVEL, 0); int batteryVolt = intent.getIntExtra(EXTRA_VOLTAGE, -1); String levelStr = getLevel(level); - tv_battery.setText("电量:" + levelStr); +// tv_battery.setText("电量:" + levelStr); String batteryVoltStr = getBatteryVolt(batteryVolt); - tv_voltage.setText("电压:" + batteryVoltStr); +// tv_voltage.setText("电压:" + batteryVoltStr); } } } diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java b/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java index f0b765c..221e3ee 100644 --- a/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java +++ b/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java @@ -135,8 +135,13 @@ public class BaseApplication extends MultiDexApplication { @Override public void onNext(String code) { Log.e("initRegisterObservable", "onNext: " + code); - Log.e("initRegisterObservable", "onNext: 重新注册aliyunPush"); - aliyunPushInit(); + switch (code){ + case "PUSH_20110": + break; + default: + Log.e("initRegisterObservable", "onNext: 重新注册aliyunPush"); + aliyunPushInit(); + } } @Override diff --git a/app/src/main/java/com/aoleyun/sn/bean/StudentsInfo.java b/app/src/main/java/com/aoleyun/sn/bean/StudentsInfo.java index 7736846..3fc708f 100644 --- a/app/src/main/java/com/aoleyun/sn/bean/StudentsInfo.java +++ b/app/src/main/java/com/aoleyun/sn/bean/StudentsInfo.java @@ -8,9 +8,10 @@ import com.google.gson.JsonParser; import java.io.Serializable; public class StudentsInfo implements Serializable { - private static final long serialVersionUID = -1489445700991359595L; + int id; + long activation_time; String batch; String sno; String realname; @@ -22,6 +23,22 @@ public class StudentsInfo implements Serializable { String bind_mobile; int bind_status; + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public long getActivation_time() { + return activation_time; + } + + public void setActivation_time(long activation_time) { + this.activation_time = activation_time; + } + public String getBatch() { return batch; } diff --git a/app/src/main/java/com/aoleyun/sn/hook/AoleyunActivityController.java b/app/src/main/java/com/aoleyun/sn/hook/AoleyunActivityController.java new file mode 100644 index 0000000..d504cee --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/hook/AoleyunActivityController.java @@ -0,0 +1,53 @@ +package com.aoleyun.sn.hook; + +import android.app.IActivityController; +import android.content.Context; +import android.content.Intent; +import android.provider.Settings; +import android.util.Log; + +import com.aoleyun.sn.utils.JGYUtils; +import com.aoleyun.sn.utils.ToastUtil; + +public class AoleyunActivityController extends IActivityController.Stub { + private static final String TAG = AoleyunActivityController.class.getSimpleName(); + + @Override + public boolean activityStarting(Intent intent, String pkg) { + Log.e(TAG, "activityStarting: " + pkg + ", intent= " + intent); + //retrun false;//false 则不会启动,直接返回。 + return JGYUtils.getInstance().isForbid(pkg); + } + + @Override + public boolean activityResuming(String pkg) { + Log.e(TAG, "activityResuming: " + pkg); + return true; + } + + @Override + public int appEarlyNotResponding(String processName, int pid, String annotation) { + Log.e(TAG, "appEarlyNotResponding: " + processName); + return 0; + } + + @Override + public boolean appCrashed(String processName, int pid, String shortMsg, String longMsg, long timeMillis, String stackTrace) { + Log.e(TAG, "appCrashed: " + processName); + return false; + } + + @Override + public int appNotResponding(String processName, int pid, String processStats) { + Log.e(TAG, "appNotResponding: " + processName); + return 0; + } + + @Override + public int systemNotResponding(String msg) { + Log.e(TAG, "systemNotResponding: " + msg); + return 1; + } + +} + diff --git a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java index e77fef6..d451597 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -2038,6 +2038,7 @@ public class NetInterfaceManager { } else { Log.e(TAG, "setDefaultApp: default_IME is empty"); } + JGYUtils.getInstance().setDefaultBrowser(default_IME); String default_launcher = defaultApp.getDefault_launcher(); if (!TextUtils.isEmpty(default_launcher)) { JGYUtils.getInstance().setDefaultDesktop(default_launcher); @@ -2410,8 +2411,9 @@ public class NetInterfaceManager { tagSets.add(JGYUtils.ZR6016Tag); } else if (platform == JGYUtils.HRAD13Platform) { tagSets.add(JGYUtils.HRAD13Tag); + } else if (platform == JGYUtils.C2Platform) { + tagSets.add(JGYUtils.C2Tag); } - }); Log.e(TAG, "clearAndAppendTags: " + tagSets); String[] tag = new ArrayList<>(tagSets).toArray(new String[tagSets.size()]); diff --git a/app/src/main/java/com/aoleyun/sn/push/PushManager.java b/app/src/main/java/com/aoleyun/sn/push/PushManager.java index 9c156cd..693eb36 100644 --- a/app/src/main/java/com/aoleyun/sn/push/PushManager.java +++ b/app/src/main/java/com/aoleyun/sn/push/PushManager.java @@ -59,6 +59,7 @@ import com.baidu.location.BDLocation; import com.baidu.location.LocationClient; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.tencent.mmkv.MMKV; @@ -1082,13 +1083,19 @@ public class PushManager { JGYUtils.getInstance().setDefaultDesktop(""); } else { JsonObject jsonObject = GsonUtils.getJsonObject(extras); - String default_launcher = jsonObject.get("default_launcher").getAsString(); - if (TextUtils.isEmpty(default_launcher)) { + JsonElement launcherElement = jsonObject.get("default_launcher"); + if (launcherElement.isJsonNull()){ JGYUtils.getInstance().setDefaultDesktop(""); SPUtils.put(mContext, "default_launcher", ""); - } else { - JGYUtils.getInstance().setDefaultDesktop(default_launcher); - SPUtils.put(mContext, "default_launcher", default_launcher); + }else { + String default_launcher = launcherElement.getAsString(); + if ( TextUtils.isEmpty(default_launcher)) { + JGYUtils.getInstance().setDefaultDesktop(""); + SPUtils.put(mContext, "default_launcher", ""); + } else { + JGYUtils.getInstance().setDefaultDesktop(default_launcher); + SPUtils.put(mContext, "default_launcher", default_launcher); + } } } } diff --git a/app/src/main/java/com/aoleyun/sn/service/DownloadService.java b/app/src/main/java/com/aoleyun/sn/service/DownloadService.java deleted file mode 100644 index 4d18295..0000000 --- a/app/src/main/java/com/aoleyun/sn/service/DownloadService.java +++ /dev/null @@ -1,34 +0,0 @@ - -package com.aoleyun.sn.service; - -import android.app.Service; -import android.content.Intent; -import android.os.IBinder; - -// 下载管理服务 -public class DownloadService extends Service { - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - flags = START_STICKY; - return super.onStartCommand(intent, flags, startId); - } - - @Override - public void onCreate() { - super.onCreate(); - startService(new Intent(this, StepService.class)); - startService(new Intent(this, GuardService.class)); - } - - - @Override - public void onDestroy() { - super.onDestroy(); - } - - @Override - public IBinder onBind(Intent intent) { - return null; - } - -} diff --git a/app/src/main/java/com/aoleyun/sn/service/main/MainService.java b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java index adad8bc..0594b94 100644 --- a/app/src/main/java/com/aoleyun/sn/service/main/MainService.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java @@ -1,7 +1,9 @@ package com.aoleyun.sn.service.main; import android.annotation.SuppressLint; +import android.app.ActivityManagerNative; import android.app.AlarmManager; +import android.app.IActivityManager; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.Service; @@ -21,6 +23,7 @@ import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.IBinder; +import android.os.RemoteException; import android.provider.Settings; import android.text.TextUtils; import android.util.DisplayMetrics; @@ -45,6 +48,7 @@ import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.gson.GsonUtils; +import com.aoleyun.sn.hook.AoleyunActivityController; import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.rlog.LogDBManager; import com.aoleyun.sn.utils.ApkUtils; @@ -353,6 +357,7 @@ public class MainService extends Service implements MainSContact.MainView, Netwo TimeTask task = new TimeTask(); task.execute("ntp.aliyun.com"); mPresenter.getLockedState(); + Settings.Global.putString(getContentResolver(), "AOLE_SERIAL", Utils.getSerial(MainService.this)); PackageManager pm = getPackageManager(); try { @@ -440,6 +445,14 @@ public class MainService extends Service implements MainSContact.MainView, Netwo // notificationManager = NotificationManagerCompat.from(this); // createNotificationChannel(); // aliyunPushInit(); + + IActivityManager activityManager = ActivityManagerNative.getDefault(); + try { + activityManager.setActivityController(new AoleyunActivityController(), true); + } catch (RemoteException e) { + Log.e(TAG, "setActivityController: " + e.getMessage()); + e.printStackTrace(); + } } @Override @@ -1143,18 +1156,18 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void getEbagCodeFinish(boolean activation) { - if (activation){ + if (activation) { mPresenter.getExclusiveAdminApp(); - Log.e(TAG, "getEBagCodeFinish: "+"已激活" ); - }else { + Log.e(TAG, "getEBagCodeFinish: " + "已激活"); + } else { mPresenter.getWiFiPasswd(); - Log.e(TAG, "getEBagCodeFinish: "+"未激活" ); + Log.e(TAG, "getEBagCodeFinish: " + "未激活"); } } @Override public void getExclusiveAdminAppFinish() { - Log.e(TAG, "getAdminAppFinish: " ); + Log.e(TAG, "getAdminAppFinish: "); mPresenter.getWiFiPasswd(); } diff --git a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java index cd62cc3..f8f2325 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java @@ -755,14 +755,17 @@ public class ApkUtils { // this.add("com.shoufei.aole"); }}; - public static List aoleyunAPP = new ArrayList() {{ + public static Set aoleyunAPP = new HashSet() {{ + this.add(BuildConfig.APPLICATION_ID); this.add("com.aoleyun.appstore"); this.add("com.aoleyun.sn"); this.add("com.aoleyun.info"); this.add("com.aoleyun.os"); this.add("com.aoleyun.browser"); - this.add("com.aoleyun.browser"); this.add("com.uiui.filecloud"); + this.add("com.gl.dwlauncher"); + this.add("com.qunyu.dividedroad"); + this.add("com.ygyb.yischool"); }}; //出厂自带的app diff --git a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java index 6e47fe4..7ac5651 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java @@ -11,6 +11,7 @@ import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentFilter; +import android.content.ServiceConnection; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -23,6 +24,7 @@ import android.net.Uri; import android.os.BatteryManager; import android.os.Build; import android.os.Environment; +import android.os.IBinder; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; @@ -67,6 +69,7 @@ import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import com.kte.interfacesettings.aidl.ITools; import com.tencent.mmkv.MMKV; import java.io.File; @@ -128,6 +131,8 @@ public class JGYUtils { public static final int AH6016Platform = 9; public static final int ZR6016Platform = 10; public static final int HRAD13Platform = 11; + public static final int Teclast8183Platform = 12; + public static final int C2Platform = 13; public static final String Other = "其他"; @@ -139,6 +144,8 @@ public class JGYUtils { public static final String AH6016Tag = "AH6016"; public static final String ZR6016Tag = "ZR6016"; public static final String HRAD13Tag = "HRAD13"; + public static final String Teclast8183Tag = "teclast8183"; + public static final String C2Tag = "MTK8183"; private CacheHelper cacheHelper; @@ -155,6 +162,28 @@ public class JGYUtils { this.crv = context.getContentResolver(); this.cacheHelper = new CacheHelper(context); initConnectedTimeCache(); + if (C2Tag.equals(BuildConfig.platform)) { + Log.e(TAG, "JGYUtils: c2"); + mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName componentName, IBinder iBinder) { + Log.e(TAG, "onServiceConnected: " + componentName); + try { + mITools = ITools.Stub.asInterface(iBinder); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onServiceDisconnected(ComponentName componentName) { + Log.e(TAG, "onServiceDisconnected: " + componentName); + mITools = null; + bindEbaifenService(); + } + }; + bindEbaifenService(); + } } public static void init(Context context) { @@ -173,6 +202,20 @@ public class JGYUtils { public static native String getAuthorization(); + private static final String EBAIFEN_PACKAGE = "com.kte.interfacesettings"; + private static final String EBAIFEN_CLASS_NAME = "com.kte.interfacesettings.ToolsImplService"; + private static final String EBAIFEN_ACTION = "com.kte.interfacesettings.aidl"; + + private ITools mITools; + private ServiceConnection mServiceConnection; + + private void bindEbaifenService() { + Intent intent = new Intent(EBAIFEN_ACTION); + intent.setPackage(EBAIFEN_PACKAGE); +// intent.setComponent(new ComponentName(EBAIFEN_PACKAGE, EBAIFEN_CLASS_NAME)); + mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); + } + public int checkSNPlatform(String sn) { if (TextUtils.isEmpty(sn)) return UnknowPlatform; String secondChars = sn.substring(1, 2); @@ -212,10 +255,14 @@ public class JGYUtils { } else if (HRAD13Tag.equalsIgnoreCase(platform)) { Log.i(TAG, "checkAppPlatform: " + "HRAD13"); return HRAD13Platform; + } else if (C2Tag.equalsIgnoreCase(platform)) { + Log.i(TAG, "checkAppPlatform: " + "C2"); + return C2Platform; } else { Log.i(TAG, "checkAppPlatform: " + "没有数据"); return UnknowPlatform; } + } public boolean isSamePlatform(String platform) { @@ -249,6 +296,8 @@ public class JGYUtils { getAppPlatformCallback.AppPlatform(ZR6016Platform); } else if (HRAD13Tag.equalsIgnoreCase(platform)) { getAppPlatformCallback.AppPlatform(HRAD13Platform); + } else if (C2Tag.equalsIgnoreCase(platform)) { + getAppPlatformCallback.AppPlatform(C2Platform); } else { getAppPlatformCallback.AppPlatform(UnknowPlatform); } @@ -272,7 +321,9 @@ public class JGYUtils { return ZR6016Tag; } else if (HRAD13Tag.equalsIgnoreCase(platform)) { return HRAD13Tag; - } else { + } else if (C2Tag.equalsIgnoreCase(platform)) { + return C2Tag; + }else { return Other; } } @@ -1164,6 +1215,8 @@ public class JGYUtils { String aole_app_forbid = String.join(",", pkgSet); Log.e(TAG, "writeAppPackageList: " + aole_app_forbid); boolean b = Settings.System.putString(crv, CommonConfig.AOLE_ACTION_APP_FORBID, aole_app_forbid); + setAppRestriction(2); + addAppInstallWhiteList(new ArrayList<>(pkgSet)); Log.e("writeAppPackageList: ", "aole_app_forbid: " + b + " " + Settings.System.getString(crv, CommonConfig.AOLE_ACTION_APP_FORBID)); } @@ -1675,6 +1728,7 @@ public class JGYUtils { || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.AH6016Platform || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.ZR6016Platform || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.HRAD13Platform + || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.C2Platform ) { Settings.Global.putInt(crv, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, state == 1 ? 0 : 1); Settings.Global.putInt(crv, Settings.Global.ADB_ENABLED, state == 1 ? 0 : 1); @@ -2065,6 +2119,9 @@ public class JGYUtils { private String Launcher3 = "com.android.launcher3"; private String Launcher3Class = "com.android.launcher3.Launcher"; + private String AoleyunOs ="com.aoleyun.os"; + private String AoleyunOsClass ="com.aoleyun.os.Launcher"; + public void setDefaultLauncher(Context context, String defPackageName, String defClassName) { try { if (!TextUtils.isEmpty(defPackageName) && !TextUtils.isEmpty(defClassName)) { @@ -2171,8 +2228,12 @@ public class JGYUtils { } private void openLauncher3() { - setDefaultDesktop(Launcher3, Launcher3Class); // ApkUtils.openPackage(mContext, Launcher3); + if ("C2".equals(Build.MODEL)){ + setDefaultDesktop(AoleyunOs, AoleyunOsClass); + }else { + setDefaultDesktop(Launcher3, Launcher3Class); + } } public String getStartClassName(String pkg) { @@ -2242,6 +2303,8 @@ public class JGYUtils { Log.e(TAG, "setDefaultDesktop: " + pkg + ":" + className); Log.e(TAG, "setDefaultDesktop: " + "persist.sys.launcher.pkgname = " + SystemProperties.get("persist.sys.launcher.pkgname")); Log.e(TAG, "setDefaultDesktop: " + "persist.sys.launcher.classname = " + SystemProperties.get("persist.sys.launcher.classname")); + + setDefaultLauncher(new ComponentName(pkg, className)); } public String getMacJson(Context context) { @@ -2372,6 +2435,72 @@ public class JGYUtils { } + public boolean isForbid(String pkg) { + switch (pkg) { + case "com.mediatek.camera": + case "com.android.camera2": + if (Settings.System.getInt(crv, "qch_app_camera", 0) == 1) { + ToastUtil.show("摄像头已禁止使用"); + return false; + } + break; + case "com.android.dialer": + if (Settings.System.getInt(crv, "qch_call_forbid", 0) == 1) { + ToastUtil.show("电话已禁止使用"); + return false; + } + break; + case "com.android.gallery3d": + if (Settings.System.getInt(crv, "qch_app_gallery", 1) == 1) { + ToastUtil.show("图库已禁止使用"); + return false; + } + break; + case "com.android.documentsui": + if (Settings.System.getInt(crv, "qch_app_filemanager", 1) == 1) { + ToastUtil.show("文件已禁止使用"); + return false; + } + break; + case "com.android.deskclock": + if (Settings.System.getInt(crv, "qch_app_deskclock", 0) == 1) { + ToastUtil.show("时钟已禁止使用"); + return false; + } + break; + case "com.android.music": + if (Settings.System.getInt(crv, "qch_app_music", 1) == 1) { + ToastUtil.show("音乐已禁止使用"); + return false; + } + break; + case "com.android.soundrecorder": + if (Settings.System.getInt(crv, "qch_app_soundrecorder", 1) == 1) { + ToastUtil.show("录音机已禁止使用"); + return false; + } + break; + case "com.aoleyun.browser": + case "com.android.browser": + if (Settings.System.getInt(crv, "qch_app_browser", 1) == 1) { + ToastUtil.show("浏览器已禁止使用"); + return false; + } + break; + case "com.android.messaging": + case "com.android.mms": + if (Settings.System.getInt(crv, "qch_app_sms", 1) == 1) { + ToastUtil.show("短信已禁止使用"); + return false; + } + break; + default: + return true; + } + return false; + } + + public static final String PACKAGE_DEVICEINFO = "com.aoleyun.sn"; public static final String CLASS_DEVICEINFO = "com.aoleyun.sn.receiver.BootReceiver"; @@ -2669,4 +2798,184 @@ public class JGYUtils { this.add("com.teclast.zyappstore"); this.add("com.teclast.zy"); }}; + + + /** + * 启用/禁用MTP数据传输功能 + * + * @param enable + */ + void setMtpEnable(boolean enable) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "setMtpEnable: " + enable); + try { + mITools.setMtpEnable(enable); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + /** + * 启用/禁用Camera功能 + * + * @param enable + */ + void setCameraEnable(boolean enable) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "setCameraEnable: " + enable); + try { + mITools.setCameraEnable(enable); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + /** + * 启用/禁用蓝牙功能 + * + * @param enable + */ + void setBluetoothEnable(boolean enable) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "setBluetoothEnable: " + enable); + try { + mITools.setBluetoothEnable(enable); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + /** + * No. 7 + * 启用/禁用OTG T卡功能 + * + * @param enable true 启用 ,false 禁用 + **/ + void setSDOTGEnable(boolean enable) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "setSDOTGEnable: " + enable); + try { + mITools.setSDOTGEnable(enable); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + + /** + * No. 31 + * 设置apk安装黑白名单模式,不会清除黑白名单数据 + * + * @param pattern 0:普通模式(黑白名单都不生效),1:黑名单模式,2:白名单模式 + **/ + void setAppRestriction(int pattern) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "setAppRestriction: " + pattern); + try { + mITools.setAppRestriction(pattern); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + /** + * No. 32 + * 获取apk安装名单模式 + * @return + * int 0:普通模式(黑白名单都不生效),1:黑名单模式,2:白名单模式 + **/ +// int getAppRestrictionMode(){ +// +// } + + /** + * No. 33 + * 设置apk安装白名单 + * 在设置前需要先调用setAppRestriction用来设置apk安装模式 + * 当设置了黑白名单模式,但对应的黑白名单值为空时,等同于设置为0(普通模式,黑白名单都不生效) + * + * @param packageNameList 包名列表 + **/ + void addAppInstallWhiteList(List packageNameList) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "addAppInstallWhiteList: " + packageNameList); + try { + mITools.addAppInstallWhiteList(packageNameList); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + /** + * No. 34 + * 删除安装白名单列表 + * + * @param packageNameList 包名列表 + **/ + void delAppInstallWhiteList(List packageNameList) { + if (C2Tag.equals(BuildConfig.platform)) { + try { + mITools.delAppInstallWhiteList(packageNameList); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + + /** + * No. 35 + * 清空安装白名单列表 + **/ + void clearAppInstallWhiteList() { + if (C2Tag.equals(BuildConfig.platform)) { + try { + mITools.clearAppInstallWhiteList(); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + /** + * No. 54 + * 设置默认Launcher + * + * @param packageName apk的包名 + * @param className apk的组件类名 + **/ + void setDefaultLauncher(ComponentName cmpName) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "setDefaultLauncher: " + cmpName); + try { + mITools.setDefaultLauncher(cmpName); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + + /** + * No. 55 + * 设置默认浏览器 + * + * @param packageName apk的包名 + **/ + public void setDefaultBrowser(String packageName) { + if (C2Tag.equals(BuildConfig.platform)) { + Log.e("ITools", "setDefaultBrowser: " + packageName); + try { + mITools.setDefaultBrowser(packageName); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } } diff --git a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java index a59cedd..8dac348 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java @@ -154,6 +154,7 @@ public class SysSettingUtils { } //存储卡 int setting_memory = changeNum(jsonObject.get("setting_memory").getAsInt()); + JGYUtils.getInstance().setSDOTGEnable(setting_memory == 0); boolean aole_sdcard_forbid_on = Settings.System.putInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_SDCARD_FORBID_ON, setting_memory); Log.e(TAG, "aole_sdcard_forbid_on:" + aole_sdcard_forbid_on); } catch (Exception e) { @@ -215,12 +216,15 @@ public class SysSettingUtils { default: case "usb_charge": usbStatus = CommonConfig.AOLE_ACTION_USB_USB_CHARGE; + JGYUtils.getInstance().setMtpEnable(false); break; case "usb_mtp": usbStatus = CommonConfig.AOLE_ACTION_USB_USB_MTP; + JGYUtils.getInstance().setMtpEnable(true); break; case "usb_midi": usbStatus = CommonConfig.AOLE_ACTION_USB_USB_MIDI; + JGYUtils.getInstance().setMtpEnable(false); break; } Intent usbIntent = new Intent(usbStatus); @@ -232,6 +236,7 @@ public class SysSettingUtils { context.sendBroadcast(usbIntent); } } + } private static void setBluetooth(Context context, int state) { @@ -295,6 +300,7 @@ public class SysSettingUtils { //设置关闭时关闭蓝牙 } } + JGYUtils.getInstance().setBluetoothEnable(setting_bht == 1); } catch (Exception e) { Log.e(TAG, "setBluetooth: " + e.getMessage()); } @@ -401,22 +407,22 @@ public class SysSettingUtils { int setting_statusbar = changeNum(jsonObject.get("setting_statusbar").getAsInt()); // int oldNum = Settings.System.getInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_HIDE_STATUS_BAR, 0); // if (oldNum != setting_statusbar) { - //写入到系统不涉及任何管控,因为之前调用会频繁隐藏显示 - boolean aole_hide_statusBar = Settings.System.putInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_HIDE_STATUS_BAR, setting_statusbar); - Log.e(TAG, "aole_hide_statusBar: " + aole_hide_statusBar); - String statusbarStatus = ""; - switch (setting_statusbar) { - case 0: - statusbarStatus = CommonConfig.AOLE_ACTION_SHOW_STATUS_BAR; - break; - case 1: - statusbarStatus = CommonConfig.AOLE_ACTION_HIDE_STATUS_BAR; - break; - default: - } - Intent statusIntent = new Intent(statusbarStatus); + //写入到系统不涉及任何管控,因为之前调用会频繁隐藏显示 + boolean aole_hide_statusBar = Settings.System.putInt(context.getContentResolver(), CommonConfig.AOLE_ACTION_HIDE_STATUS_BAR, setting_statusbar); + Log.e(TAG, "aole_hide_statusBar: " + aole_hide_statusBar); + String statusbarStatus = ""; + switch (setting_statusbar) { + case 0: + statusbarStatus = CommonConfig.AOLE_ACTION_SHOW_STATUS_BAR; + break; + case 1: + statusbarStatus = CommonConfig.AOLE_ACTION_HIDE_STATUS_BAR; + break; + default: + } + Intent statusIntent = new Intent(statusbarStatus); // Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); - context.sendBroadcast(statusIntent); + context.sendBroadcast(statusIntent); // } } @@ -462,6 +468,7 @@ public class SysSettingUtils { } Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); context.sendBroadcast(cameraIntent); + JGYUtils.getInstance().setCameraEnable(setting_camera == 1); } catch (Exception e) { Log.e(TAG, "setCamera: " + e.getMessage()); } diff --git a/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java b/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java index 55855ca..0ee6d29 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java @@ -96,6 +96,12 @@ public class TimeUtils { return sdf.format(date); } + public static String getActivationTime(long second) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date = new Date(second * 1000); + return sdf.format(date); + } + private static long getLoopTime(String timestamp) { //"15:34:39" SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); diff --git a/app/src/main/java/com/aoleyun/sn/utils/Utils.java b/app/src/main/java/com/aoleyun/sn/utils/Utils.java index e5be1ea..acfcd1d 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/Utils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/Utils.java @@ -1766,6 +1766,7 @@ public class Utils { || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.AH6016Platform || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.ZR6016Platform || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.HRAD13Platform + || JGYUtils.getInstance().checkAppPlatform() == JGYUtils.C2Platform ) { return Utils.getProperty("ro.build.display.id", "获取失败"); } else { diff --git a/app/src/main/res/drawable-hdpi/com_system_clean.png b/app/src/main/res/drawable-hdpi/com_system_clean.png new file mode 100644 index 0000000..b21d7e7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/com_system_clean.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_activated.png b/app/src/main/res/drawable-hdpi/icon_activated.png new file mode 100644 index 0000000..03d3158 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_activated.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_batch.png b/app/src/main/res/drawable-hdpi/icon_batch.png new file mode 100644 index 0000000..1c72e0f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_batch.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_class.png b/app/src/main/res/drawable-hdpi/icon_class.png new file mode 100644 index 0000000..03fd377 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_class.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_clean.png b/app/src/main/res/drawable-hdpi/icon_clean.png new file mode 100644 index 0000000..df986df Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_clean.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_inactivated.png b/app/src/main/res/drawable-hdpi/icon_inactivated.png new file mode 100644 index 0000000..66b1d21 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_inactivated.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_student_id.png b/app/src/main/res/drawable-hdpi/icon_student_id.png new file mode 100644 index 0000000..6d65d27 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_student_id.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_update.png b/app/src/main/res/drawable-hdpi/icon_update.png new file mode 100644 index 0000000..39baf9c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_update.png differ diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 40e835f..0bcfa98 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -42,32 +42,6 @@ app:layout_constraintStart_toEndOf="@+id/iv_back" app:layout_constraintTop_toTopOf="parent" /> - - -