添加主界面切换背景的功能 #17

Merged
plyf8vez7 merged 5 commits from fancanyu_branch into master 3 months ago

@ -1,2 +0,0 @@
# fcytom

@ -1,15 +0,0 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties

@ -1,2 +0,0 @@
#Fri Nov 21 21:50:12 CST 2025
gradle.version=8.13

@ -1,2 +0,0 @@
#Fri Nov 21 21:50:06 CST 2025
java.home=D\:\\Program Files\\AndroidStudio\\jbr

@ -1,166 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Notesmaster"
tools:targetApi="31">
<activity
android:name=".ui.NotesListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustPan"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.NoteEditActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:exported="true">
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter >
<intent-filter >
<action android:name="android.intent.action.INSERT_OR_EDIT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<provider
android:name="net.micode.notes.data.NotesProvider"
android:authorities="micode_notes"
android:multiprocess="true" />
<receiver
android:name=".widget.NoteWidgetProvider_2x"
android:label="@string/app_widget2x2"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_2x_info" />
</receiver>
<receiver
android:name=".widget.NoteWidgetProvider_4x"
android:label="@string/app_widget4x4"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_4x_info" />
</receiver>
<receiver android:name=".ui.AlarmInitReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name="net.micode.notes.ui.AlarmReceiver"
android:process=":remote" >
</receiver>
<activity
android:name=".ui.AlarmAlertActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
</activity>
<activity
android:name=".ui.PasswordVerifyActivity"
android:label="@string/app_name"
android:theme="@style/NoteTheme"
android:exported="true" >
</activity>
<activity
android:name="net.micode.notes.ui.NotesPreferenceActivity"
android:label="@string/preferences_title"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Holo.Light" >
</activity>
<service
android:name="net.micode.notes.gtask.remote.GTaskSyncService"
android:exported="false" >
</service>
<meta-data
android:name="android.app.default_searchable"
android:value=".ui.NoteEditActivity" />
<!-- <activity-->
<!-- android:name=".MainActivity"-->
<!-- android:exported="true">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
</application>
</manifest>

@ -1,166 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Notesmaster"
tools:targetApi="31">
<activity
android:name=".ui.NotesListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustPan"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.NoteEditActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:exported="true">
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter >
<intent-filter >
<action android:name="android.intent.action.INSERT_OR_EDIT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<provider
android:name="net.micode.notes.data.NotesProvider"
android:authorities="micode_notes"
android:multiprocess="true" />
<receiver
android:name=".widget.NoteWidgetProvider_2x"
android:label="@string/app_widget2x2"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_2x_info" />
</receiver>
<receiver
android:name=".widget.NoteWidgetProvider_4x"
android:label="@string/app_widget4x4"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_4x_info" />
</receiver>
<receiver android:name=".ui.AlarmInitReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name="net.micode.notes.ui.AlarmReceiver"
android:process=":remote" >
</receiver>
<activity
android:name=".ui.AlarmAlertActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
</activity>
<activity
android:name=".ui.PasswordVerifyActivity"
android:label="@string/app_name"
android:theme="@style/NoteTheme"
android:exported="true" >
</activity>
<activity
android:name="net.micode.notes.ui.NotesPreferenceActivity"
android:label="@string/preferences_title"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Holo.Light" >
</activity>
<service
android:name="net.micode.notes.gtask.remote.GTaskSyncService"
android:exported="false" >
</service>
<meta-data
android:name="android.app.default_searchable"
android:value=".ui.NoteEditActivity" />
<!-- <activity-->
<!-- android:name=".MainActivity"-->
<!-- android:exported="true">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
</application>
</manifest>

@ -1,166 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Notesmaster"
tools:targetApi="31">
<activity
android:name=".ui.NotesListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustPan"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.NoteEditActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:exported="true">
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter >
<intent-filter >
<action android:name="android.intent.action.INSERT_OR_EDIT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<provider
android:name="net.micode.notes.data.NotesProvider"
android:authorities="micode_notes"
android:multiprocess="true" />
<receiver
android:name=".widget.NoteWidgetProvider_2x"
android:label="@string/app_widget2x2"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_2x_info" />
</receiver>
<receiver
android:name=".widget.NoteWidgetProvider_4x"
android:label="@string/app_widget4x4"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_4x_info" />
</receiver>
<receiver android:name=".ui.AlarmInitReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name="net.micode.notes.ui.AlarmReceiver"
android:process=":remote" >
</receiver>
<activity
android:name=".ui.AlarmAlertActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
</activity>
<activity
android:name=".ui.PasswordVerifyActivity"
android:label="@string/app_name"
android:theme="@style/NoteTheme"
android:exported="true" >
</activity>
<activity
android:name="net.micode.notes.ui.NotesPreferenceActivity"
android:label="@string/preferences_title"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Holo.Light" >
</activity>
<service
android:name="net.micode.notes.gtask.remote.GTaskSyncService"
android:exported="false" >
</service>
<meta-data
android:name="android.app.default_searchable"
android:value=".ui.NoteEditActivity" />
<!-- <activity-->
<!-- android:name=".MainActivity"-->
<!-- android:exported="true">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
</application>
</manifest>

@ -1,436 +0,0 @@
package net.micode.notes.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
/**
*
*
*/
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences"; // 偏好设置文件名
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; // 同步账号名称偏好键
public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; // 最后同步时间偏好键
public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; // 背景颜色设置偏好键
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账号偏好分类键
private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账号权限过滤键
private PreferenceCategory mAccountCategory; // 账号设置偏好分类
private GTaskReceiver mReceiver; // 同步状态广播接收器
private Account[] mOriAccounts; // 原始谷歌账号数组
private boolean mHasAddedAccount; // 是否新增账号标记
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 设置ActionBar返回按钮
getActionBar().setDisplayHomeAsUpEnabled(true);
// 加载偏好设置资源
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver();
// 注册同步服务广播过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
mOriAccounts = null;
// 添加设置页面头部视图
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
// 为密码锁设置选项添加点击事件
Preference passwordSettingPref = findPreference("pref_key_password_setting");
if (passwordSettingPref != null) {
passwordSettingPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
showPasswordSettingDialog();
return true;
}
});
}
}
@Override
protected void onResume() {
super.onResume();
// 检测是否新增账号,自动配置同步账号
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
for (Account accountNew : accounts) {
boolean found = false;
for (Account accountOld : mOriAccounts) {
if (TextUtils.equals(accountOld.name, accountNew.name)) {
found = true;
break;
}
}
if (!found) {
setSyncAccount(accountNew.name);
break;
}
}
}
}
// 刷新页面UI
refreshUI();
}
@Override
protected void onDestroy() {
// 注销广播接收器,释放资源
if (mReceiver != null) {
unregisterReceiver(mReceiver);
}
super.onDestroy();
}
/**
*
*/
private void loadAccountPreference() {
mAccountCategory.removeAll();
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
accountPref.setSummary(getString(R.string.preferences_account_summary));
accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
// 首次设置账号,显示账号选择对话框
showSelectAccountAlertDialog();
} else {
// 已设置账号,显示更换账号确认对话框
showChangeAccountConfirmAlertDialog();
}
} else {
Toast.makeText(NotesPreferenceActivity.this,
R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT)
.show();
}
return true;
}
});
mAccountCategory.addPreference(accountPref);
}
/**
*
*/
private void loadSyncButton() {
Button syncButton = (Button) findViewById(R.id.preference_sync_button);
TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
// 根据同步状态设置按钮样式和点击事件
if (GTaskSyncService.isSyncing()) {
syncButton.setText(getString(R.string.preferences_button_sync_cancel));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
}
});
} else {
syncButton.setText(getString(R.string.preferences_button_sync_immediately));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.startSync(NotesPreferenceActivity.this);
}
});
}
// 未设置账号时禁用同步按钮
syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
// 设置最后同步时间展示
if (GTaskSyncService.isSyncing()) {
lastSyncTimeView.setText(GTaskSyncService.getProgressString());
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
long lastSyncTime = getLastSyncTime(this);
if (lastSyncTime != 0) {
lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
DateFormat.format(getString(R.string.preferences_last_sync_time_format),
lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
lastSyncTimeView.setVisibility(View.GONE);
}
}
}
/**
* UI+
*/
private void refreshUI() {
loadAccountPreference();
loadSyncButton();
}
/**
* /
*/
private void showSelectAccountAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
dialogBuilder.setCustomTitle(titleView);
dialogBuilder.setPositiveButton(null, null);
Account[] accounts = getGoogleAccounts();
String defAccount = getSyncAccountName(this);
mOriAccounts = accounts;
mHasAddedAccount = false;
// 展示已有谷歌账号列表
if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length];
final CharSequence[] itemMapping = items;
int checkedItem = -1;
int index = 0;
for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index;
}
items[index++] = account.name;
}
dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
setSyncAccount(itemMapping[which].toString());
dialog.dismiss();
refreshUI();
}
});
}
// 添加新增账号视图
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
dialogBuilder.setView(addAccountView);
final AlertDialog dialog = dialogBuilder.show();
addAccountView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mHasAddedAccount = true;
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls"
});
startActivityForResult(intent, -1);
dialog.dismiss();
}
});
}
/**
* //
*/
private void showChangeAccountConfirmAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
getSyncAccountName(this)));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
dialogBuilder.setCustomTitle(titleView);
// 对话框选项
CharSequence[] menuItemArray = new CharSequence[] {
getString(R.string.preferences_menu_change_account),
getString(R.string.preferences_menu_remove_account),
getString(R.string.preferences_menu_cancel)
};
dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showSelectAccountAlertDialog();
} else if (which == 1) {
removeSyncAccount();
refreshUI();
}
}
});
dialogBuilder.show();
}
/**
*
* @return
*/
private Account[] getGoogleAccounts() {
AccountManager accountManager = AccountManager.get(this);
return accountManager.getAccountsByType("com.google");
}
/**
*
* @param account
*/
private void setSyncAccount(String account) {
if (!getSyncAccountName(this).equals(account)) {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (account != null) {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
} else {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
editor.commit();
// 清空最后同步时间
setLastSyncTime(this, 0);
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
Toast.makeText(NotesPreferenceActivity.this,
getString(R.string.preferences_toast_success_set_accout, account),
Toast.LENGTH_SHORT).show();
}
}
/**
*
*/
private void removeSyncAccount() {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
editor.commit();
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
}
/**
*
* @param context
* @return
*/
public static String getSyncAccountName(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
/**
*
* @param context
* @param time
*/
public static void setLastSyncTime(Context context, long time) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
editor.commit();
}
/**
*
* @param context
* @return
*/
public static long getLastSyncTime(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
}
/**
* 广
* 广UI
*/
private class GTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
refreshUI();
if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
syncStatus.setText(intent
.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
}
/**
* ActionBar
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 返回笔记列表首页
Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return false;
}
}
}

@ -1,531 +0,0 @@
package net.micode.notes.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
/**
*
*
*/
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences"; // 偏好设置文件名
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; // 同步账号名称偏好键
public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; // 最后同步时间偏好键
public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; // 背景颜色设置偏好键
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账号偏好分类键
private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账号权限过滤键
private PreferenceCategory mAccountCategory; // 账号设置偏好分类
private GTaskReceiver mReceiver; // 同步状态广播接收器
private Account[] mOriAccounts; // 原始谷歌账号数组
private boolean mHasAddedAccount; // 是否新增账号标记
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 设置ActionBar返回按钮
getActionBar().setDisplayHomeAsUpEnabled(true);
// 加载偏好设置资源
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver();
// 注册同步服务广播过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
mOriAccounts = null;
// 添加设置页面头部视图
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
// 为密码锁设置选项添加点击事件
Preference passwordSettingPref = findPreference("pref_key_password_setting");
if (passwordSettingPref != null) {
passwordSettingPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
showPasswordSettingDialog();
return true;
}
});
}
}
@Override
protected void onResume() {
super.onResume();
// 检测是否新增账号,自动配置同步账号
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
for (Account accountNew : accounts) {
boolean found = false;
for (Account accountOld : mOriAccounts) {
if (TextUtils.equals(accountOld.name, accountNew.name)) {
found = true;
break;
}
}
if (!found) {
setSyncAccount(accountNew.name);
break;
}
}
}
}
// 刷新页面UI
refreshUI();
}
@Override
protected void onDestroy() {
// 注销广播接收器,释放资源
if (mReceiver != null) {
unregisterReceiver(mReceiver);
}
super.onDestroy();
}
/**
*
*/
private void loadAccountPreference() {
mAccountCategory.removeAll();
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
accountPref.setSummary(getString(R.string.preferences_account_summary));
accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
// 首次设置账号,显示账号选择对话框
showSelectAccountAlertDialog();
} else {
// 已设置账号,显示更换账号确认对话框
showChangeAccountConfirmAlertDialog();
}
} else {
Toast.makeText(NotesPreferenceActivity.this,
R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT)
.show();
}
return true;
}
});
mAccountCategory.addPreference(accountPref);
}
/**
*
*/
private void loadSyncButton() {
Button syncButton = (Button) findViewById(R.id.preference_sync_button);
TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
// 根据同步状态设置按钮样式和点击事件
if (GTaskSyncService.isSyncing()) {
syncButton.setText(getString(R.string.preferences_button_sync_cancel));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
}
});
} else {
syncButton.setText(getString(R.string.preferences_button_sync_immediately));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.startSync(NotesPreferenceActivity.this);
}
});
}
// 未设置账号时禁用同步按钮
syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
// 设置最后同步时间展示
if (GTaskSyncService.isSyncing()) {
lastSyncTimeView.setText(GTaskSyncService.getProgressString());
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
long lastSyncTime = getLastSyncTime(this);
if (lastSyncTime != 0) {
lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
DateFormat.format(getString(R.string.preferences_last_sync_time_format),
lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
lastSyncTimeView.setVisibility(View.GONE);
}
}
}
/**
* UI+
*/
private void refreshUI() {
loadAccountPreference();
loadSyncButton();
}
/**
* /
*/
private void showSelectAccountAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
dialogBuilder.setCustomTitle(titleView);
dialogBuilder.setPositiveButton(null, null);
Account[] accounts = getGoogleAccounts();
String defAccount = getSyncAccountName(this);
mOriAccounts = accounts;
mHasAddedAccount = false;
// 展示已有谷歌账号列表
if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length];
final CharSequence[] itemMapping = items;
int checkedItem = -1;
int index = 0;
for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index;
}
items[index++] = account.name;
}
dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
setSyncAccount(itemMapping[which].toString());
dialog.dismiss();
refreshUI();
}
});
}
// 添加新增账号视图
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
dialogBuilder.setView(addAccountView);
final AlertDialog dialog = dialogBuilder.show();
addAccountView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mHasAddedAccount = true;
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls"
});
startActivityForResult(intent, -1);
dialog.dismiss();
}
});
}
/**
* //
*/
private void showChangeAccountConfirmAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
getSyncAccountName(this)));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
dialogBuilder.setCustomTitle(titleView);
// 对话框选项
CharSequence[] menuItemArray = new CharSequence[] {
getString(R.string.preferences_menu_change_account),
getString(R.string.preferences_menu_remove_account),
getString(R.string.preferences_menu_cancel)
};
dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showSelectAccountAlertDialog();
} else if (which == 1) {
removeSyncAccount();
refreshUI();
}
}
});
dialogBuilder.show();
}
/**
*
* @return
*/
private Account[] getGoogleAccounts() {
AccountManager accountManager = AccountManager.get(this);
return accountManager.getAccountsByType("com.google");
}
/**
*
* @param account
*/
private void setSyncAccount(String account) {
if (!getSyncAccountName(this).equals(account)) {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (account != null) {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
} else {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
editor.commit();
// 清空最后同步时间
setLastSyncTime(this, 0);
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
Toast.makeText(NotesPreferenceActivity.this,
getString(R.string.preferences_toast_success_set_accout, account),
Toast.LENGTH_SHORT).show();
}
}
/**
*
*/
private void removeSyncAccount() {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
editor.commit();
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
}
/**
*
* @param context
* @return
*/
public static String getSyncAccountName(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
/**
*
* @param context
* @param time
*/
public static void setLastSyncTime(Context context, long time) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
editor.commit();
}
/**
*
* @param context
* @return
*/
public static long getLastSyncTime(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
}
/**
*
*/
private void showPasswordSettingDialog() {
final boolean hasPassword = PasswordVerifyActivity.isPasswordEnabled(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(hasPassword ? "修改密码" : "设置密码");
// 布局包含密码输入框
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText passwordEditText = (EditText) view.findViewById(R.id.et_foler_name);
passwordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordEditText.setHint(hasPassword ? "输入新密码" : "设置密码");
passwordEditText.setMaxLength(4);
builder.setView(view);
builder.setPositiveButton(hasPassword ? "修改" : "设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = passwordEditText.getText().toString().trim();
if (TextUtils.isEmpty(password) || password.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (hasPassword) {
// 修改密码,需要验证旧密码
showVerifyOldPasswordDialog(password);
} else {
// 设置新密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, password);
Toast.makeText(NotesPreferenceActivity.this, "密码设置成功", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
// 如果已有密码,添加关闭密码锁的选项
if (hasPassword) {
builder.setNeutralButton("关闭密码锁", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PasswordVerifyActivity.clearPassword(NotesPreferenceActivity.this);
Toast.makeText(NotesPreferenceActivity.this, "密码锁已关闭", Toast.LENGTH_SHORT).show();
}
});
}
builder.show();
}
/**
*
* @param newPassword
*/
private void showVerifyOldPasswordDialog(final String newPassword) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("验证旧密码");
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText oldPasswordEditText = (EditText) view.findViewById(R.id.et_foler_name);
oldPasswordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
oldPasswordEditText.setHint("输入旧密码");
oldPasswordEditText.setMaxLength(4);
builder.setView(view);
builder.setPositiveButton("验证", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String oldPassword = oldPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(oldPassword) || oldPassword.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (oldPassword.equals(PasswordVerifyActivity.getSavedPassword(NotesPreferenceActivity.this))) {
// 旧密码正确,修改密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, newPassword);
Toast.makeText(NotesPreferenceActivity.this, "密码修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(NotesPreferenceActivity.this, "旧密码错误", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
/**
* 广
* 广UI
*/
private class GTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
refreshUI();
if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
syncStatus.setText(intent
.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
}
/**
* ActionBar
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 返回笔记列表首页
Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return false;
}
}
}

@ -1,532 +0,0 @@
package net.micode.notes.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
/**
*
*
*/
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences"; // 偏好设置文件名
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; // 同步账号名称偏好键
public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; // 最后同步时间偏好键
public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; // 背景颜色设置偏好键
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账号偏好分类键
private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账号权限过滤键
private PreferenceCategory mAccountCategory; // 账号设置偏好分类
private GTaskReceiver mReceiver; // 同步状态广播接收器
private Account[] mOriAccounts; // 原始谷歌账号数组
private boolean mHasAddedAccount; // 是否新增账号标记
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 设置ActionBar返回按钮
getActionBar().setDisplayHomeAsUpEnabled(true);
// 加载偏好设置资源
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver();
// 注册同步服务广播过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
mOriAccounts = null;
// 添加设置页面头部视图
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
// 为密码锁设置选项添加点击事件
Preference passwordSettingPref = findPreference("pref_key_password_setting");
if (passwordSettingPref != null) {
passwordSettingPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
showPasswordSettingDialog();
return true;
}
});
}
}
@Override
protected void onResume() {
super.onResume();
// 检测是否新增账号,自动配置同步账号
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
for (Account accountNew : accounts) {
boolean found = false;
for (Account accountOld : mOriAccounts) {
if (TextUtils.equals(accountOld.name, accountNew.name)) {
found = true;
break;
}
}
if (!found) {
setSyncAccount(accountNew.name);
break;
}
}
}
}
// 刷新页面UI
refreshUI();
}
@Override
protected void onDestroy() {
// 注销广播接收器,释放资源
if (mReceiver != null) {
unregisterReceiver(mReceiver);
}
super.onDestroy();
}
/**
*
*/
private void loadAccountPreference() {
mAccountCategory.removeAll();
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
accountPref.setSummary(getString(R.string.preferences_account_summary));
accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
// 首次设置账号,显示账号选择对话框
showSelectAccountAlertDialog();
} else {
// 已设置账号,显示更换账号确认对话框
showChangeAccountConfirmAlertDialog();
}
} else {
Toast.makeText(NotesPreferenceActivity.this,
R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT)
.show();
}
return true;
}
});
mAccountCategory.addPreference(accountPref);
}
/**
*
*/
private void loadSyncButton() {
Button syncButton = (Button) findViewById(R.id.preference_sync_button);
TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
// 根据同步状态设置按钮样式和点击事件
if (GTaskSyncService.isSyncing()) {
syncButton.setText(getString(R.string.preferences_button_sync_cancel));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
}
});
} else {
syncButton.setText(getString(R.string.preferences_button_sync_immediately));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.startSync(NotesPreferenceActivity.this);
}
});
}
// 未设置账号时禁用同步按钮
syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
// 设置最后同步时间展示
if (GTaskSyncService.isSyncing()) {
lastSyncTimeView.setText(GTaskSyncService.getProgressString());
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
long lastSyncTime = getLastSyncTime(this);
if (lastSyncTime != 0) {
lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
DateFormat.format(getString(R.string.preferences_last_sync_time_format),
lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
lastSyncTimeView.setVisibility(View.GONE);
}
}
}
/**
* UI+
*/
private void refreshUI() {
loadAccountPreference();
loadSyncButton();
}
/**
* /
*/
private void showSelectAccountAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
dialogBuilder.setCustomTitle(titleView);
dialogBuilder.setPositiveButton(null, null);
Account[] accounts = getGoogleAccounts();
String defAccount = getSyncAccountName(this);
mOriAccounts = accounts;
mHasAddedAccount = false;
// 展示已有谷歌账号列表
if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length];
final CharSequence[] itemMapping = items;
int checkedItem = -1;
int index = 0;
for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index;
}
items[index++] = account.name;
}
dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
setSyncAccount(itemMapping[which].toString());
dialog.dismiss();
refreshUI();
}
});
}
// 添加新增账号视图
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
dialogBuilder.setView(addAccountView);
final AlertDialog dialog = dialogBuilder.show();
addAccountView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mHasAddedAccount = true;
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls"
});
startActivityForResult(intent, -1);
dialog.dismiss();
}
});
}
/**
* //
*/
private void showChangeAccountConfirmAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
getSyncAccountName(this)));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
dialogBuilder.setCustomTitle(titleView);
// 对话框选项
CharSequence[] menuItemArray = new CharSequence[] {
getString(R.string.preferences_menu_change_account),
getString(R.string.preferences_menu_remove_account),
getString(R.string.preferences_menu_cancel)
};
dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showSelectAccountAlertDialog();
} else if (which == 1) {
removeSyncAccount();
refreshUI();
}
}
});
dialogBuilder.show();
}
/**
*
* @return
*/
private Account[] getGoogleAccounts() {
AccountManager accountManager = AccountManager.get(this);
return accountManager.getAccountsByType("com.google");
}
/**
*
* @param account
*/
private void setSyncAccount(String account) {
if (!getSyncAccountName(this).equals(account)) {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (account != null) {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
} else {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
editor.commit();
// 清空最后同步时间
setLastSyncTime(this, 0);
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
Toast.makeText(NotesPreferenceActivity.this,
getString(R.string.preferences_toast_success_set_accout, account),
Toast.LENGTH_SHORT).show();
}
}
/**
*
*/
private void removeSyncAccount() {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
editor.commit();
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
}
/**
*
* @param context
* @return
*/
public static String getSyncAccountName(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
/**
*
* @param context
* @param time
*/
public static void setLastSyncTime(Context context, long time) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
editor.commit();
}
/**
*
* @param context
* @return
*/
public static long getLastSyncTime(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
}
/**
*
*/
private void showPasswordSettingDialog() {
final boolean hasPassword = PasswordVerifyActivity.isPasswordEnabled(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(hasPassword ? "修改密码" : "设置密码");
// 布局包含密码输入框
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText passwordEditText = (EditText) view.findViewById(R.id.et_foler_name);
passwordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordEditText.setHint(hasPassword ? "输入新密码" : "设置密码");
passwordEditText.setMaxLength(4);
builder.setView(view);
builder.setPositiveButton(hasPassword ? "修改" : "设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = passwordEditText.getText().toString().trim();
if (TextUtils.isEmpty(password) || password.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (hasPassword) {
// 修改密码,需要验证旧密码
showVerifyOldPasswordDialog(password);
} else {
// 设置新密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, password);
Toast.makeText(NotesPreferenceActivity.this, "密码设置成功", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
// 如果已有密码,添加关闭密码锁的选项
if (hasPassword) {
builder.setNeutralButton("关闭密码锁", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PasswordVerifyActivity.clearPassword(NotesPreferenceActivity.this);
Toast.makeText(NotesPreferenceActivity.this, "密码锁已关闭", Toast.LENGTH_SHORT).show();
}
});
}
builder.show();
}
/**
*
* @param newPassword
*/
private void showVerifyOldPasswordDialog(final String newPassword) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("验证旧密码");
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText oldPasswordEditText = (EditText) view.findViewById(R.id.et_foler_name);
oldPasswordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
oldPasswordEditText.setHint("输入旧密码");
oldPasswordEditText.setMaxLength(4);
builder.setView(view);
builder.setPositiveButton("验证", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String oldPassword = oldPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(oldPassword) || oldPassword.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (oldPassword.equals(PasswordVerifyActivity.getSavedPassword(NotesPreferenceActivity.this))) {
// 旧密码正确,修改密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, newPassword);
Toast.makeText(NotesPreferenceActivity.this, "密码修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(NotesPreferenceActivity.this, "旧密码错误", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
/**
* 广
* 广UI
*/
private class GTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
refreshUI();
if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
syncStatus.setText(intent
.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
}
/**
* ActionBar
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 返回笔记列表首页
Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return false;
}
}
}

@ -1,532 +0,0 @@
package net.micode.notes.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
/**
*
*
*/
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences"; // 偏好设置文件名
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; // 同步账号名称偏好键
public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; // 最后同步时间偏好键
public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; // 背景颜色设置偏好键
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账号偏好分类键
private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账号权限过滤键
private PreferenceCategory mAccountCategory; // 账号设置偏好分类
private GTaskReceiver mReceiver; // 同步状态广播接收器
private Account[] mOriAccounts; // 原始谷歌账号数组
private boolean mHasAddedAccount; // 是否新增账号标记
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 设置ActionBar返回按钮
getActionBar().setDisplayHomeAsUpEnabled(true);
// 加载偏好设置资源
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver();
// 注册同步服务广播过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
mOriAccounts = null;
// 添加设置页面头部视图
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
// 为密码锁设置选项添加点击事件
Preference passwordSettingPref = findPreference("pref_key_password_setting");
if (passwordSettingPref != null) {
passwordSettingPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
showPasswordSettingDialog();
return true;
}
});
}
}
@Override
protected void onResume() {
super.onResume();
// 检测是否新增账号,自动配置同步账号
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
for (Account accountNew : accounts) {
boolean found = false;
for (Account accountOld : mOriAccounts) {
if (TextUtils.equals(accountOld.name, accountNew.name)) {
found = true;
break;
}
}
if (!found) {
setSyncAccount(accountNew.name);
break;
}
}
}
}
// 刷新页面UI
refreshUI();
}
@Override
protected void onDestroy() {
// 注销广播接收器,释放资源
if (mReceiver != null) {
unregisterReceiver(mReceiver);
}
super.onDestroy();
}
/**
*
*/
private void loadAccountPreference() {
mAccountCategory.removeAll();
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
accountPref.setSummary(getString(R.string.preferences_account_summary));
accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
// 首次设置账号,显示账号选择对话框
showSelectAccountAlertDialog();
} else {
// 已设置账号,显示更换账号确认对话框
showChangeAccountConfirmAlertDialog();
}
} else {
Toast.makeText(NotesPreferenceActivity.this,
R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT)
.show();
}
return true;
}
});
mAccountCategory.addPreference(accountPref);
}
/**
*
*/
private void loadSyncButton() {
Button syncButton = (Button) findViewById(R.id.preference_sync_button);
TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
// 根据同步状态设置按钮样式和点击事件
if (GTaskSyncService.isSyncing()) {
syncButton.setText(getString(R.string.preferences_button_sync_cancel));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
}
});
} else {
syncButton.setText(getString(R.string.preferences_button_sync_immediately));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.startSync(NotesPreferenceActivity.this);
}
});
}
// 未设置账号时禁用同步按钮
syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
// 设置最后同步时间展示
if (GTaskSyncService.isSyncing()) {
lastSyncTimeView.setText(GTaskSyncService.getProgressString());
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
long lastSyncTime = getLastSyncTime(this);
if (lastSyncTime != 0) {
lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
DateFormat.format(getString(R.string.preferences_last_sync_time_format),
lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
lastSyncTimeView.setVisibility(View.GONE);
}
}
}
/**
* UI+
*/
private void refreshUI() {
loadAccountPreference();
loadSyncButton();
}
/**
* /
*/
private void showSelectAccountAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
dialogBuilder.setCustomTitle(titleView);
dialogBuilder.setPositiveButton(null, null);
Account[] accounts = getGoogleAccounts();
String defAccount = getSyncAccountName(this);
mOriAccounts = accounts;
mHasAddedAccount = false;
// 展示已有谷歌账号列表
if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length];
final CharSequence[] itemMapping = items;
int checkedItem = -1;
int index = 0;
for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index;
}
items[index++] = account.name;
}
dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
setSyncAccount(itemMapping[which].toString());
dialog.dismiss();
refreshUI();
}
});
}
// 添加新增账号视图
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
dialogBuilder.setView(addAccountView);
final AlertDialog dialog = dialogBuilder.show();
addAccountView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mHasAddedAccount = true;
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls"
});
startActivityForResult(intent, -1);
dialog.dismiss();
}
});
}
/**
* //
*/
private void showChangeAccountConfirmAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
getSyncAccountName(this)));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
dialogBuilder.setCustomTitle(titleView);
// 对话框选项
CharSequence[] menuItemArray = new CharSequence[] {
getString(R.string.preferences_menu_change_account),
getString(R.string.preferences_menu_remove_account),
getString(R.string.preferences_menu_cancel)
};
dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showSelectAccountAlertDialog();
} else if (which == 1) {
removeSyncAccount();
refreshUI();
}
}
});
dialogBuilder.show();
}
/**
*
* @return
*/
private Account[] getGoogleAccounts() {
AccountManager accountManager = AccountManager.get(this);
return accountManager.getAccountsByType("com.google");
}
/**
*
* @param account
*/
private void setSyncAccount(String account) {
if (!getSyncAccountName(this).equals(account)) {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (account != null) {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
} else {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
editor.commit();
// 清空最后同步时间
setLastSyncTime(this, 0);
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
Toast.makeText(NotesPreferenceActivity.this,
getString(R.string.preferences_toast_success_set_accout, account),
Toast.LENGTH_SHORT).show();
}
}
/**
*
*/
private void removeSyncAccount() {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
editor.commit();
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
}
/**
*
* @param context
* @return
*/
public static String getSyncAccountName(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
/**
*
* @param context
* @param time
*/
public static void setLastSyncTime(Context context, long time) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
editor.commit();
}
/**
*
* @param context
* @return
*/
public static long getLastSyncTime(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
}
/**
*
*/
private void showPasswordSettingDialog() {
final boolean hasPassword = PasswordVerifyActivity.isPasswordEnabled(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(hasPassword ? "修改密码" : "设置密码");
// 布局包含密码输入框
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText passwordEditText = (EditText) view.findViewById(R.id.et_foler_name);
passwordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordEditText.setHint(hasPassword ? "输入新密码" : "设置密码");
passwordEditText.setFilters(new android.text.InputFilter[] {new android.text.InputFilter.LengthFilter(4)});
builder.setView(view);
builder.setPositiveButton(hasPassword ? "修改" : "设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = passwordEditText.getText().toString().trim();
if (TextUtils.isEmpty(password) || password.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (hasPassword) {
// 修改密码,需要验证旧密码
showVerifyOldPasswordDialog(password);
} else {
// 设置新密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, password);
Toast.makeText(NotesPreferenceActivity.this, "密码设置成功", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
// 如果已有密码,添加关闭密码锁的选项
if (hasPassword) {
builder.setNeutralButton("关闭密码锁", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PasswordVerifyActivity.clearPassword(NotesPreferenceActivity.this);
Toast.makeText(NotesPreferenceActivity.this, "密码锁已关闭", Toast.LENGTH_SHORT).show();
}
});
}
builder.show();
}
/**
*
* @param newPassword
*/
private void showVerifyOldPasswordDialog(final String newPassword) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("验证旧密码");
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText oldPasswordEditText = (EditText) view.findViewById(R.id.et_foler_name);
oldPasswordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
oldPasswordEditText.setHint("输入旧密码");
oldPasswordEditText.setMaxLength(4);
builder.setView(view);
builder.setPositiveButton("验证", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String oldPassword = oldPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(oldPassword) || oldPassword.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (oldPassword.equals(PasswordVerifyActivity.getSavedPassword(NotesPreferenceActivity.this))) {
// 旧密码正确,修改密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, newPassword);
Toast.makeText(NotesPreferenceActivity.this, "密码修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(NotesPreferenceActivity.this, "旧密码错误", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
/**
* 广
* 广UI
*/
private class GTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
refreshUI();
if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
syncStatus.setText(intent
.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
}
/**
* ActionBar
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 返回笔记列表首页
Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return false;
}
}
}

@ -1,532 +0,0 @@
package net.micode.notes.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
/**
*
*
*/
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences"; // 偏好设置文件名
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; // 同步账号名称偏好键
public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; // 最后同步时间偏好键
public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; // 背景颜色设置偏好键
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账号偏好分类键
private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账号权限过滤键
private PreferenceCategory mAccountCategory; // 账号设置偏好分类
private GTaskReceiver mReceiver; // 同步状态广播接收器
private Account[] mOriAccounts; // 原始谷歌账号数组
private boolean mHasAddedAccount; // 是否新增账号标记
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 设置ActionBar返回按钮
getActionBar().setDisplayHomeAsUpEnabled(true);
// 加载偏好设置资源
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver();
// 注册同步服务广播过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
mOriAccounts = null;
// 添加设置页面头部视图
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
// 为密码锁设置选项添加点击事件
Preference passwordSettingPref = findPreference("pref_key_password_setting");
if (passwordSettingPref != null) {
passwordSettingPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
showPasswordSettingDialog();
return true;
}
});
}
}
@Override
protected void onResume() {
super.onResume();
// 检测是否新增账号,自动配置同步账号
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
for (Account accountNew : accounts) {
boolean found = false;
for (Account accountOld : mOriAccounts) {
if (TextUtils.equals(accountOld.name, accountNew.name)) {
found = true;
break;
}
}
if (!found) {
setSyncAccount(accountNew.name);
break;
}
}
}
}
// 刷新页面UI
refreshUI();
}
@Override
protected void onDestroy() {
// 注销广播接收器,释放资源
if (mReceiver != null) {
unregisterReceiver(mReceiver);
}
super.onDestroy();
}
/**
*
*/
private void loadAccountPreference() {
mAccountCategory.removeAll();
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
accountPref.setSummary(getString(R.string.preferences_account_summary));
accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
// 首次设置账号,显示账号选择对话框
showSelectAccountAlertDialog();
} else {
// 已设置账号,显示更换账号确认对话框
showChangeAccountConfirmAlertDialog();
}
} else {
Toast.makeText(NotesPreferenceActivity.this,
R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT)
.show();
}
return true;
}
});
mAccountCategory.addPreference(accountPref);
}
/**
*
*/
private void loadSyncButton() {
Button syncButton = (Button) findViewById(R.id.preference_sync_button);
TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
// 根据同步状态设置按钮样式和点击事件
if (GTaskSyncService.isSyncing()) {
syncButton.setText(getString(R.string.preferences_button_sync_cancel));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
}
});
} else {
syncButton.setText(getString(R.string.preferences_button_sync_immediately));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.startSync(NotesPreferenceActivity.this);
}
});
}
// 未设置账号时禁用同步按钮
syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
// 设置最后同步时间展示
if (GTaskSyncService.isSyncing()) {
lastSyncTimeView.setText(GTaskSyncService.getProgressString());
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
long lastSyncTime = getLastSyncTime(this);
if (lastSyncTime != 0) {
lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
DateFormat.format(getString(R.string.preferences_last_sync_time_format),
lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
lastSyncTimeView.setVisibility(View.GONE);
}
}
}
/**
* UI+
*/
private void refreshUI() {
loadAccountPreference();
loadSyncButton();
}
/**
* /
*/
private void showSelectAccountAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
dialogBuilder.setCustomTitle(titleView);
dialogBuilder.setPositiveButton(null, null);
Account[] accounts = getGoogleAccounts();
String defAccount = getSyncAccountName(this);
mOriAccounts = accounts;
mHasAddedAccount = false;
// 展示已有谷歌账号列表
if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length];
final CharSequence[] itemMapping = items;
int checkedItem = -1;
int index = 0;
for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index;
}
items[index++] = account.name;
}
dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
setSyncAccount(itemMapping[which].toString());
dialog.dismiss();
refreshUI();
}
});
}
// 添加新增账号视图
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
dialogBuilder.setView(addAccountView);
final AlertDialog dialog = dialogBuilder.show();
addAccountView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mHasAddedAccount = true;
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls"
});
startActivityForResult(intent, -1);
dialog.dismiss();
}
});
}
/**
* //
*/
private void showChangeAccountConfirmAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
getSyncAccountName(this)));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
dialogBuilder.setCustomTitle(titleView);
// 对话框选项
CharSequence[] menuItemArray = new CharSequence[] {
getString(R.string.preferences_menu_change_account),
getString(R.string.preferences_menu_remove_account),
getString(R.string.preferences_menu_cancel)
};
dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showSelectAccountAlertDialog();
} else if (which == 1) {
removeSyncAccount();
refreshUI();
}
}
});
dialogBuilder.show();
}
/**
*
* @return
*/
private Account[] getGoogleAccounts() {
AccountManager accountManager = AccountManager.get(this);
return accountManager.getAccountsByType("com.google");
}
/**
*
* @param account
*/
private void setSyncAccount(String account) {
if (!getSyncAccountName(this).equals(account)) {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (account != null) {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
} else {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
editor.commit();
// 清空最后同步时间
setLastSyncTime(this, 0);
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
Toast.makeText(NotesPreferenceActivity.this,
getString(R.string.preferences_toast_success_set_accout, account),
Toast.LENGTH_SHORT).show();
}
}
/**
*
*/
private void removeSyncAccount() {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
editor.commit();
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
}
/**
*
* @param context
* @return
*/
public static String getSyncAccountName(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
/**
*
* @param context
* @param time
*/
public static void setLastSyncTime(Context context, long time) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
editor.commit();
}
/**
*
* @param context
* @return
*/
public static long getLastSyncTime(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
}
/**
*
*/
private void showPasswordSettingDialog() {
final boolean hasPassword = PasswordVerifyActivity.isPasswordEnabled(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(hasPassword ? "修改密码" : "设置密码");
// 布局包含密码输入框
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText passwordEditText = (EditText) view.findViewById(R.id.et_foler_name);
passwordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordEditText.setHint(hasPassword ? "输入新密码" : "设置密码");
passwordEditText.setFilters(new android.text.InputFilter[] {new android.text.InputFilter.LengthFilter(4)});
builder.setView(view);
builder.setPositiveButton(hasPassword ? "修改" : "设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = passwordEditText.getText().toString().trim();
if (TextUtils.isEmpty(password) || password.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (hasPassword) {
// 修改密码,需要验证旧密码
showVerifyOldPasswordDialog(password);
} else {
// 设置新密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, password);
Toast.makeText(NotesPreferenceActivity.this, "密码设置成功", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
// 如果已有密码,添加关闭密码锁的选项
if (hasPassword) {
builder.setNeutralButton("关闭密码锁", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PasswordVerifyActivity.clearPassword(NotesPreferenceActivity.this);
Toast.makeText(NotesPreferenceActivity.this, "密码锁已关闭", Toast.LENGTH_SHORT).show();
}
});
}
builder.show();
}
/**
*
* @param newPassword
*/
private void showVerifyOldPasswordDialog(final String newPassword) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("验证旧密码");
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText oldPasswordEditText = (EditText) view.findViewById(R.id.et_foler_name);
oldPasswordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
oldPasswordEditText.setHint("输入旧密码");
oldPasswordEditText.setFilters(new android.text.InputFilter[] {new android.text.InputFilter.LengthFilter(4)});
builder.setView(view);
builder.setPositiveButton("验证", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String oldPassword = oldPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(oldPassword) || oldPassword.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (oldPassword.equals(PasswordVerifyActivity.getSavedPassword(NotesPreferenceActivity.this))) {
// 旧密码正确,修改密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, newPassword);
Toast.makeText(NotesPreferenceActivity.this, "密码修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(NotesPreferenceActivity.this, "旧密码错误", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
/**
* 广
* 广UI
*/
private class GTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
refreshUI();
if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
syncStatus.setText(intent
.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
}
/**
* ActionBar
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 返回笔记列表首页
Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return false;
}
}
}

@ -1,532 +0,0 @@
package net.micode.notes.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
/**
*
*
*/
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences"; // 偏好设置文件名
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; // 同步账号名称偏好键
public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; // 最后同步时间偏好键
public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; // 背景颜色设置偏好键
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账号偏好分类键
private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账号权限过滤键
private PreferenceCategory mAccountCategory; // 账号设置偏好分类
private GTaskReceiver mReceiver; // 同步状态广播接收器
private Account[] mOriAccounts; // 原始谷歌账号数组
private boolean mHasAddedAccount; // 是否新增账号标记
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 设置ActionBar返回按钮
getActionBar().setDisplayHomeAsUpEnabled(true);
// 加载偏好设置资源
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver();
// 注册同步服务广播过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
mOriAccounts = null;
// 添加设置页面头部视图
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
// 为密码锁设置选项添加点击事件
Preference passwordSettingPref = findPreference("pref_key_password_setting");
if (passwordSettingPref != null) {
passwordSettingPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
showPasswordSettingDialog();
return true;
}
});
}
}
@Override
protected void onResume() {
super.onResume();
// 检测是否新增账号,自动配置同步账号
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
for (Account accountNew : accounts) {
boolean found = false;
for (Account accountOld : mOriAccounts) {
if (TextUtils.equals(accountOld.name, accountNew.name)) {
found = true;
break;
}
}
if (!found) {
setSyncAccount(accountNew.name);
break;
}
}
}
}
// 刷新页面UI
refreshUI();
}
@Override
protected void onDestroy() {
// 注销广播接收器,释放资源
if (mReceiver != null) {
unregisterReceiver(mReceiver);
}
super.onDestroy();
}
/**
*
*/
private void loadAccountPreference() {
mAccountCategory.removeAll();
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
accountPref.setSummary(getString(R.string.preferences_account_summary));
accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
// 首次设置账号,显示账号选择对话框
showSelectAccountAlertDialog();
} else {
// 已设置账号,显示更换账号确认对话框
showChangeAccountConfirmAlertDialog();
}
} else {
Toast.makeText(NotesPreferenceActivity.this,
R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT)
.show();
}
return true;
}
});
mAccountCategory.addPreference(accountPref);
}
/**
*
*/
private void loadSyncButton() {
Button syncButton = (Button) findViewById(R.id.preference_sync_button);
TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
// 根据同步状态设置按钮样式和点击事件
if (GTaskSyncService.isSyncing()) {
syncButton.setText(getString(R.string.preferences_button_sync_cancel));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.cancelSync(NotesPreferenceActivity.this);
}
});
} else {
syncButton.setText(getString(R.string.preferences_button_sync_immediately));
syncButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GTaskSyncService.startSync(NotesPreferenceActivity.this);
}
});
}
// 未设置账号时禁用同步按钮
syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
// 设置最后同步时间展示
if (GTaskSyncService.isSyncing()) {
lastSyncTimeView.setText(GTaskSyncService.getProgressString());
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
long lastSyncTime = getLastSyncTime(this);
if (lastSyncTime != 0) {
lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
DateFormat.format(getString(R.string.preferences_last_sync_time_format),
lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
lastSyncTimeView.setVisibility(View.GONE);
}
}
}
/**
* UI+
*/
private void refreshUI() {
loadAccountPreference();
loadSyncButton();
}
/**
* /
*/
private void showSelectAccountAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
dialogBuilder.setCustomTitle(titleView);
dialogBuilder.setPositiveButton(null, null);
Account[] accounts = getGoogleAccounts();
String defAccount = getSyncAccountName(this);
mOriAccounts = accounts;
mHasAddedAccount = false;
// 展示已有谷歌账号列表
if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length];
final CharSequence[] itemMapping = items;
int checkedItem = -1;
int index = 0;
for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index;
}
items[index++] = account.name;
}
dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
setSyncAccount(itemMapping[which].toString());
dialog.dismiss();
refreshUI();
}
});
}
// 添加新增账号视图
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
dialogBuilder.setView(addAccountView);
final AlertDialog dialog = dialogBuilder.show();
addAccountView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mHasAddedAccount = true;
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls"
});
startActivityForResult(intent, -1);
dialog.dismiss();
}
});
}
/**
* //
*/
private void showChangeAccountConfirmAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 设置自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
getSyncAccountName(this)));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
dialogBuilder.setCustomTitle(titleView);
// 对话框选项
CharSequence[] menuItemArray = new CharSequence[] {
getString(R.string.preferences_menu_change_account),
getString(R.string.preferences_menu_remove_account),
getString(R.string.preferences_menu_cancel)
};
dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showSelectAccountAlertDialog();
} else if (which == 1) {
removeSyncAccount();
refreshUI();
}
}
});
dialogBuilder.show();
}
/**
*
* @return
*/
private Account[] getGoogleAccounts() {
AccountManager accountManager = AccountManager.get(this);
return accountManager.getAccountsByType("com.google");
}
/**
*
* @param account
*/
private void setSyncAccount(String account) {
if (!getSyncAccountName(this).equals(account)) {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (account != null) {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account);
} else {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
editor.commit();
// 清空最后同步时间
setLastSyncTime(this, 0);
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
Toast.makeText(NotesPreferenceActivity.this,
getString(R.string.preferences_toast_success_set_accout, account),
Toast.LENGTH_SHORT).show();
}
}
/**
*
*/
private void removeSyncAccount() {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
editor.commit();
// 异步清理本地同步相关数据
new Thread(new Runnable() {
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, "");
values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
}
/**
*
* @param context
* @return
*/
public static String getSyncAccountName(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, "");
}
/**
*
* @param context
* @param time
*/
public static void setLastSyncTime(Context context, long time) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
editor.commit();
}
/**
*
* @param context
* @return
*/
public static long getLastSyncTime(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
}
/**
*
*/
private void showPasswordSettingDialog() {
final boolean hasPassword = PasswordVerifyActivity.isPasswordEnabled(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(hasPassword ? "修改密码" : "设置密码");
// 布局包含密码输入框
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText passwordEditText = (EditText) view.findViewById(R.id.et_foler_name);
passwordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordEditText.setHint(hasPassword ? "输入新密码" : "设置密码");
passwordEditText.setFilters(new android.text.InputFilter[] {new android.text.InputFilter.LengthFilter(4)});
builder.setView(view);
builder.setPositiveButton(hasPassword ? "修改" : "设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = passwordEditText.getText().toString().trim();
if (TextUtils.isEmpty(password) || password.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (hasPassword) {
// 修改密码,需要验证旧密码
showVerifyOldPasswordDialog(password);
} else {
// 设置新密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, password);
Toast.makeText(NotesPreferenceActivity.this, "密码设置成功", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
// 如果已有密码,添加关闭密码锁的选项
if (hasPassword) {
builder.setNeutralButton("关闭密码锁", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PasswordVerifyActivity.clearPassword(NotesPreferenceActivity.this);
Toast.makeText(NotesPreferenceActivity.this, "密码锁已关闭", Toast.LENGTH_SHORT).show();
}
});
}
builder.show();
}
/**
*
* @param newPassword
*/
private void showVerifyOldPasswordDialog(final String newPassword) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("验证旧密码");
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_edit_text, null);
final EditText oldPasswordEditText = (EditText) view.findViewById(R.id.et_foler_name);
oldPasswordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
oldPasswordEditText.setHint("输入旧密码");
oldPasswordEditText.setFilters(new android.text.InputFilter[] {new android.text.InputFilter.LengthFilter(4)});
builder.setView(view);
builder.setPositiveButton("验证", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String oldPassword = oldPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(oldPassword) || oldPassword.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
if (oldPassword.equals(PasswordVerifyActivity.getSavedPassword(NotesPreferenceActivity.this))) {
// 旧密码正确,修改密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, newPassword);
Toast.makeText(NotesPreferenceActivity.this, "密码修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(NotesPreferenceActivity.this, "旧密码错误", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
/**
* 广
* 广UI
*/
private class GTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
refreshUI();
if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
syncStatus.setText(intent
.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
}
/**
* ActionBar
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 返回笔记列表首页
Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return false;
}
}
}

@ -1,143 +0,0 @@
package net.micode.notes.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.ui.NotesListActivity;
public class PasswordVerifyActivity extends Activity implements OnClickListener {
private static final String PREFERENCE_PASSWORD_ENABLED = "net.micode.notes.password_enabled";
private static final String PREFERENCE_PASSWORD = "net.micode.notes.password";
private EditText mPasswordEditText;
private Button mVerifyButton;
private Button mForgotPasswordButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_password_verify);
initViews();
}
private void initViews() {
mPasswordEditText = (EditText) findViewById(R.id.et_password);
mVerifyButton = (Button) findViewById(R.id.btn_verify);
mForgotPasswordButton = (Button) findViewById(R.id.btn_forgot_password);
mVerifyButton.setOnClickListener(this);
mForgotPasswordButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_verify:
verifyPassword();
break;
case R.id.btn_forgot_password:
showForgotPasswordDialog();
break;
default:
break;
}
}
private void verifyPassword() {
String inputPassword = mPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(inputPassword)) {
Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
return;
}
if (inputPassword.length() != 4) {
Toast.makeText(this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
String savedPassword = getSavedPassword();
if (inputPassword.equals(savedPassword)) {
// 密码正确,进入应用
Intent intent = new Intent(this, NotesListActivity.class);
startActivity(intent);
finish();
} else {
Toast.makeText(this, "密码错误,请重新输入", Toast.LENGTH_SHORT).show();
mPasswordEditText.setText("");
}
}
private void showForgotPasswordDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("忘记密码")
.setMessage("确定要重置密码吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
resetPassword();
}
})
.setNegativeButton("取消", null)
.show();
}
private void resetPassword() {
// 重置密码
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
Toast.makeText(this, "密码已重置", Toast.LENGTH_SHORT).show();
// 进入应用
Intent intent = new Intent(this, NotesListActivity.class);
startActivity(intent);
finish();
}
// 静态方法:判断密码锁是否已启用
public static boolean isPasswordEnabled(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getBoolean(PREFERENCE_PASSWORD_ENABLED, false);
}
// 静态方法:获取保存的密码
public static String getSavedPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(PREFERENCE_PASSWORD, "");
}
// 静态方法:设置密码
public static void setPassword(Context context, String password) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, true)
.putString(PREFERENCE_PASSWORD, password)
.apply();
}
// 静态方法:清除密码
public static void clearPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
}
}

@ -1,143 +0,0 @@
package net.micode.notes.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.ui.NotesListActivity;
public class PasswordVerifyActivity extends Activity implements OnClickListener {
private static final String PREFERENCE_PASSWORD_ENABLED = "net.micode.notes.password_enabled";
private static final String PREFERENCE_PASSWORD = "net.micode.notes.password";
private EditText mPasswordEditText;
private Button mVerifyButton;
private Button mForgotPasswordButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_password_verify);
initViews();
}
private void initViews() {
mPasswordEditText = (EditText) findViewById(R.id.et_password);
mVerifyButton = (Button) findViewById(R.id.btn_verify);
mForgotPasswordButton = (Button) findViewById(R.id.btn_forgot_password);
mVerifyButton.setOnClickListener(this);
mForgotPasswordButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_verify:
verifyPassword();
break;
case R.id.btn_forgot_password:
showForgotPasswordDialog();
break;
default:
break;
}
}
private void verifyPassword() {
String inputPassword = mPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(inputPassword)) {
Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
return;
}
if (inputPassword.length() != 4) {
Toast.makeText(this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
String savedPassword = getSavedPassword(this);
if (inputPassword.equals(savedPassword)) {
// 密码正确,进入应用
Intent intent = new Intent(this, NotesListActivity.class);
startActivity(intent);
finish();
} else {
Toast.makeText(this, "密码错误,请重新输入", Toast.LENGTH_SHORT).show();
mPasswordEditText.setText("");
}
}
private void showForgotPasswordDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("忘记密码")
.setMessage("确定要重置密码吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
resetPassword();
}
})
.setNegativeButton("取消", null)
.show();
}
private void resetPassword() {
// 重置密码
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
Toast.makeText(this, "密码已重置", Toast.LENGTH_SHORT).show();
// 进入应用
Intent intent = new Intent(this, NotesListActivity.class);
startActivity(intent);
finish();
}
// 静态方法:判断密码锁是否已启用
public static boolean isPasswordEnabled(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getBoolean(PREFERENCE_PASSWORD_ENABLED, false);
}
// 静态方法:获取保存的密码
public static String getSavedPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(PREFERENCE_PASSWORD, "");
}
// 静态方法:设置密码
public static void setPassword(Context context, String password) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, true)
.putString(PREFERENCE_PASSWORD, password)
.apply();
}
// 静态方法:清除密码
public static void clearPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
}
}

@ -1,143 +0,0 @@
package net.micode.notes.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.ui.NotesListActivity;
public class PasswordVerifyActivity extends Activity implements OnClickListener {
private static final String PREFERENCE_PASSWORD_ENABLED = "net.micode.notes.password_enabled";
private static final String PREFERENCE_PASSWORD = "net.micode.notes.password";
private EditText mPasswordEditText;
private Button mVerifyButton;
private Button mForgotPasswordButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_password_verify);
initViews();
}
private void initViews() {
mPasswordEditText = (EditText) findViewById(R.id.et_password);
mVerifyButton = (Button) findViewById(R.id.btn_verify);
mForgotPasswordButton = (Button) findViewById(R.id.btn_forgot_password);
mVerifyButton.setOnClickListener(this);
mForgotPasswordButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_verify:
verifyPassword();
break;
case R.id.btn_forgot_password:
showForgotPasswordDialog();
break;
default:
break;
}
}
private void verifyPassword() {
String inputPassword = mPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(inputPassword)) {
Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
return;
}
if (inputPassword.length() != 4) {
Toast.makeText(this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
String savedPassword = getSavedPassword(this);
if (inputPassword.equals(savedPassword)) {
// 密码正确,进入应用
Intent intent = new Intent(this, NotesListActivity.class);
startActivity(intent);
finish();
} else {
Toast.makeText(this, "密码错误,请重新输入", Toast.LENGTH_SHORT).show();
mPasswordEditText.setText("");
}
}
private void showForgotPasswordDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("忘记密码")
.setMessage("确定要重置密码吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
resetPassword();
}
})
.setNegativeButton("取消", null)
.show();
}
private void resetPassword() {
// 重置密码
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
Toast.makeText(this, "密码已重置", Toast.LENGTH_SHORT).show();
// 进入应用
Intent intent = new Intent(this, NotesListActivity.class);
startActivity(intent);
finish();
}
// 静态方法:判断密码锁是否已启用
public static boolean isPasswordEnabled(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getBoolean(PREFERENCE_PASSWORD_ENABLED, false);
}
// 静态方法:获取保存的密码
public static String getSavedPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(PREFERENCE_PASSWORD, "");
}
// 静态方法:设置密码
public static void setPassword(Context context, String password) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, true)
.putString(PREFERENCE_PASSWORD, password)
.apply();
}
// 静态方法:清除密码
public static void clearPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
}
}

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/list_background"
android:orientation="vertical"
android:padding="20dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="60dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="@string/app_name"
android:textSize="24sp"
android:textColor="@color/primary_text_dark" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入密码"
android:textSize="18sp"
android:textColor="@color/primary_text_dark" />
<EditText
android:id="@+id/et_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:inputType="numberPassword"
android:background="@android:drawable/edit_text"
android:hint="输入4位数字密码"
android:maxLength="4"
android:gravity="center"
android:textSize="24sp" />
<Button
android:id="@+id/btn_verify"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="验证"
android:textSize="18sp" />
<Button
android:id="@+id/btn_forgot_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="忘记密码?"
android:textSize="14sp"
android:background="@null"
android:textColor="@color/secondary_text_dark" />
</LinearLayout>
</LinearLayout>

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/list_background"
android:orientation="vertical"
android:padding="20dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="60dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="@string/app_name"
android:textSize="24sp"
android:textColor="@color/primary_text_dark" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入密码"
android:textSize="18sp"
android:textColor="@color/primary_text_dark" />
<EditText
android:id="@+id/et_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:inputType="numberPassword"
android:background="@android:drawable/edit_text"
android:hint="输入4位数字密码"
android:maxLength="4"
android:gravity="center"
android:textSize="24sp" />
<Button
android:id="@+id/btn_verify"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="验证"
android:textSize="18sp" />
<Button
android:id="@+id/btn_forgot_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="忘记密码?"
android:textSize="14sp"
android:background="@null"
android:textColor="@color/secondary_text_dark" />
</LinearLayout>
</LinearLayout>

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/list_background"
android:orientation="vertical"
android:padding="20dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="60dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="@string/app_name"
android:textSize="24sp"
android:textColor="@color/primary_text_dark" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入密码"
android:textSize="18sp"
android:textColor="@color/primary_text_dark" />
<EditText
android:id="@+id/et_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:inputType="numberPassword"
android:background="@android:drawable/edit_text"
android:hint="输入4位数字密码"
android:maxLength="4"
android:gravity="center"
android:textSize="24sp" />
<Button
android:id="@+id/btn_verify"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="验证"
android:textSize="18sp" />
<Button
android:id="@+id/btn_forgot_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="忘记密码?"
android:textSize="14sp"
android:background="@null"
android:textColor="@color/secondary_text_dark" />
</LinearLayout>
</LinearLayout>

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="pref_sync_account_key">
</PreferenceCategory>
<PreferenceCategory>
<CheckBoxPreference
android:key="pref_key_bg_random_appear"
android:title="@string/preferences_bg_random_appear_title"
android:defaultValue="false" />
</PreferenceCategory>
<PreferenceCategory
android:title="密码锁设置">
<Preference
android:key="pref_key_password_setting"
android:title="密码锁设置"
android:summary="设置或修改密码" />
</PreferenceCategory>
</PreferenceScreen>

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="pref_sync_account_key">
</PreferenceCategory>
<PreferenceCategory>
<CheckBoxPreference
android:key="pref_key_bg_random_appear"
android:title="@string/preferences_bg_random_appear_title"
android:defaultValue="false" />
</PreferenceCategory>
<PreferenceCategory
android:title="密码锁设置">
<Preference
android:key="pref_key_password_setting"
android:title="密码锁设置"
android:summary="设置或修改密码" />
</PreferenceCategory>
</PreferenceScreen>

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="pref_sync_account_key">
</PreferenceCategory>
<PreferenceCategory>
<CheckBoxPreference
android:key="pref_key_bg_random_appear"
android:title="@string/preferences_bg_random_appear_title"
android:defaultValue="false" />
</PreferenceCategory>
<PreferenceCategory
android:title="密码锁设置">
<Preference
android:key="pref_key_password_setting"
android:title="密码锁设置"
android:summary="设置或修改密码" />
</PreferenceCategory>
</PreferenceScreen>

@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CheckStyle-IDEA" serialisationVersion="2">
<checkstyleVersion>12.3.1</checkstyleVersion>
<scanScope>JavaOnly</scanScope>
<copyLibs>true</copyLibs>
<option name="thirdPartyClasspath" />
<option name="activeLocationIds" />
<option name="locations">
<list>
<ConfigurationLocation id="bundled-sun-checks" type="BUNDLED" scope="All" description="Sun Checks">(bundled)</ConfigurationLocation>
<ConfigurationLocation id="bundled-google-checks" type="BUNDLED" scope="All" description="Google Checks">(bundled)</ConfigurationLocation>
</list>
</option>
</component>
</project>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
</component>
</project>

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-01-13T14:37:17.057329800Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="LocalEmulator" identifier="path=C:\Users\fancanyu\.android\avd\Pixel_5.avd" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState>
</selectionStates>
</component>
</project>

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DeviceTable">
<option name="columnSorters">
<list>
<ColumnSorterState>
<option name="column" value="Status" />
<option name="order" value="ASCENDING" />
</ColumnSorterState>
<ColumnSorterState>
<option name="column" value="Name" />
<option name="order" value="ASCENDING" />
</ColumnSorterState>
</list>
</option>
</component>
</project>

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

@ -1,9 +0,0 @@
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SonarLintProjectSettings">
<option name="bindingEnabled" value="true" />
<option name="projectKey" value="Test" />
<option name="serverId" value="LocalSonar" />
</component>
</project>

@ -1,349 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidLayouts">
<shared>
<config />
</shared>
<layouts>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_launcher_background.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_launcher_foreground.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/new_note.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/account_dialog_title.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_main.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_password_verify.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/add_account_text.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/datetime_picker.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/dialog_edit_text.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/folder_list_item.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/note_edit.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/note_edit_list_item.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/note_item.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/note_list.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/note_list_dropdown_menu.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/note_list_footer.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/settings_header.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/widget_2x.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/widget_4x.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/call_note_edit.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/call_record_folder.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/note_edit.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/note_list.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/note_list_dropdown.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/note_list_options.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/sub_folder.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/mipmap-anydpi/ic_launcher.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/xml/preferences.xml">
<config>
<theme>@style/Theme.Notesmaster</theme>
</config>
</layout>
</layouts>
</component>
<component name="AutoImportSettings">
<option name="autoReloadType" value="NONE" />
</component>
<component name="ChangeListManager">
<list default="true" id="3916a339-7f63-4e55-9dc0-781ae5148cd5" name="Changes" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ClangdSettings">
<option name="formatViaClangd" value="false" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[DeviceId(pluginId=LocalEmulator, isTemplate=false, identifier=path=C:\Users\fancanyu\.android\avd\Pixel_5.avd)]" />
<component name="ExternalProjectsData">
<projectState path="$PROJECT_DIR$">
<ProjectState />
</projectState>
</component>
<component name="ExternalProjectsManager">
<system id="GRADLE">
<state>
<projects_view>
<tree_state>
<expand>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="Notes-master" type="f1a62948:ProjectNode" />
</path>
</expand>
<select />
</tree_state>
</projects_view>
</state>
</system>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
</list>
</option>
</component>
<component name="GradleScriptDefinitionsStorage" workingDir="$PROJECT_DIR$" gradleHome="C:\Users\fancanyu\.gradle\wrapper\dists\gradle-8.13-bin\bynj8867joaln2pdnozgpow3q\gradle-8.13" javaHome="D:\Program Files\AndroidStudio\jbr" gradleVersion="8.13" />
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 5
}</component>
<component name="ProjectId" id="35n5Rnn9Cqc48r17NQrCPJ4WXEc" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;Android App.app.executor&quot;: &quot;Run&quot;,
&quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
&quot;ResourceManagerPrefKey.ResourceType&quot;: &quot;DRAWABLE&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
&quot;RunOnceActivity.cidr.known.project.marker&quot;: &quot;true&quot;,
&quot;RunOnceActivity.readMode.enableVisualFormatting&quot;: &quot;true&quot;,
&quot;cf.first.check.clang-format&quot;: &quot;false&quot;,
&quot;cidr.known.project.marker&quot;: &quot;true&quot;,
&quot;com.android.tools.idea.streaming.zoom.toolbar.visible&quot;: &quot;false&quot;,
&quot;com.google.services.firebase.aqiPopupShown&quot;: &quot;true&quot;,
&quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;D:/Projects/Notes-master/app/src/main/res&quot;,
&quot;project.structure.last.edited&quot;: &quot;Dependencies&quot;,
&quot;project.structure.proportion&quot;: &quot;0.17&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;AndroidSdkUpdater&quot;,
&quot;show.do.not.copy.http.proxy.settings.to.gradle&quot;: &quot;true&quot;
}
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\Projects\Notes-master\app\src\main\res" />
<recent name="D:\Projects\Notes-master\app\src\main\java\net\micode\notes" />
</key>
<key name="CopyClassDialog.RECENTS_KEY">
<recent name="net.micode.notes.data" />
</key>
</component>
<component name="RunManager">
<configuration name="app" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="Notes-master.app" />
<option name="ANDROID_RUN_CONFIGURATION_SCHEMA_VERSION" value="1" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="ALLOW_ASSUME_VERIFIED" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="RESTORE_ENABLED" value="false" />
<option name="RESTORE_FILE" value="" />
<option name="RESTORE_FRESH_INSTALL_ONLY" value="false" />
<option name="CLEAR_LOGCAT" value="false" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Hybrid>
<Java>
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Java>
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="3916a339-7f63-4e55-9dc0-781ae5148cd5" name="Changes" comment="" />
<created>1763732990236</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1763732990236</updated>
</task>
<servers />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/app/src/main/java/net/micode/notes/data/NotesProvider.java</url>
<line>293</line>
<option name="timeStamp" value="1" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
<component name="play_dynamic_filters_status">
<option name="appIdToCheckInfo">
<map>
<entry key="net.micode.notes">
<value>
<CheckInfo lastCheckTimestamp="1768825900066" />
</value>
</entry>
<entry key="net.micode.notes.test">
<value>
<CheckInfo lastCheckTimestamp="1768825900071" />
</value>
</entry>
</map>
</option>
</component>
</project>

@ -1,2 +0,0 @@
/build
app/build/

@ -1,62 +0,0 @@
plugins {
alias(libs.plugins.android.application)
}
android {
namespace = "net.micode.notes"
compileSdk{
version = release(36)
}
defaultConfig {
applicationId = "net.micode.notes"
minSdk = 30
targetSdk = 36
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
packaging {
resources.excludes.add("META-INF/DEPENDENCIES");
resources.excludes.add("META-INF/NOTICE");
resources.excludes.add("META-INF/LICENSE");
resources.excludes.add("META-INF/LICENSE.txt");
resources.excludes.add("META-INF/NOTICE.txt");
}
}
dependencies {
implementation(libs.appcompat)
implementation(libs.material)
implementation(libs.activity)
implementation(libs.constraintlayout)
// implementation(fileTree(mapOf(
// "dir" to "D:\\Projects\\Notes-master\\httpcomponents-client-4.5.14-bin",
// "include" to listOf("*.aar", "*.jar"),
// "exclude" to listOf("")
// )))
implementation(files("D:\\Projects\\Notes-master\\httpcomponents-client-4.5.14-bin\\lib\\httpclient-osgi-4.5.14.jar"))
implementation(files("D:\\Projects\\Notes-master\\httpcomponents-client-4.5.14-bin\\lib\\httpclient-win-4.5.14.jar"))
implementation(files("D:\\Projects\\Notes-master\\httpcomponents-client-4.5.14-bin\\lib\\httpcore-4.4.16.jar"))
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
}

@ -0,0 +1,293 @@
<dependencies>
<compile
roots="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar:unspecified@jar,__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar:unspecified@jar,__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar:unspecified@jar,:@@:app::debug,androidx.test.ext:junit:1.1.5@aar,androidx.test.espresso:espresso-core:3.5.1@aar,com.google.android.material:material:1.10.0@aar,androidx.appcompat:appcompat:1.6.1@aar,androidx.viewpager2:viewpager2:1.0.0@aar,androidx.fragment:fragment:1.3.6@aar,androidx.fragment:fragment:1.3.6@aar,androidx.activity:activity:1.8.0@aar,androidx.constraintlayout:constraintlayout:2.1.4@aar,androidx.test:runner:1.5.2@aar,junit:junit:4.13.2@jar,org.hamcrest:hamcrest-integration:1.3@jar,org.hamcrest:hamcrest-library:1.3@jar,org.hamcrest:hamcrest-core:1.3@jar,androidx.test:core:1.5.0@aar,androidx.test.services:storage:1.4.2@aar,androidx.test:monitor:1.6.1@aar,androidx.test:annotation:1.0.1@aar,androidx.appcompat:appcompat-resources:1.6.1@aar,androidx.drawerlayout:drawerlayout:1.1.1@aar,androidx.coordinatorlayout:coordinatorlayout:1.1.0@aar,androidx.dynamicanimation:dynamicanimation:1.0.0@aar,androidx.transition:transition:1.2.0@aar,androidx.vectordrawable:vectordrawable-animated:1.1.0@aar,androidx.vectordrawable:vectordrawable:1.1.0@aar,androidx.viewpager:viewpager:1.0.0@aar,androidx.legacy:legacy-support-core-utils:1.0.0@aar,androidx.loader:loader:1.0.0@aar,androidx.recyclerview:recyclerview:1.1.0@aar,androidx.customview:customview:1.1.0@aar,androidx.lifecycle:lifecycle-livedata:2.6.1@aar,androidx.lifecycle:lifecycle-livedata-core:2.6.1@aar,androidx.lifecycle:lifecycle-common:2.6.1@jar,androidx.lifecycle:lifecycle-viewmodel:2.6.1@aar,androidx.lifecycle:lifecycle-viewmodel:2.6.1@aar,androidx.lifecycle:lifecycle-runtime:2.6.1@aar,androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1@aar,androidx.core:core-ktx:1.2.0@aar,androidx.core:core:1.9.0@aar,androidx.core:core:1.9.0@aar,androidx.cursoradapter:cursoradapter:1.0.0@aar,androidx.cardview:cardview:1.0.0@aar,androidx.savedstate:savedstate:1.2.1@aar,androidx.concurrent:concurrent-futures:1.1.0@jar,androidx.versionedparcelable:versionedparcelable:1.1.1@aar,androidx.collection:collection:1.1.0@jar,androidx.arch.core:core-runtime:2.1.0@aar,androidx.arch.core:core-common:2.2.0@jar,androidx.interpolator:interpolator:1.0.0@aar,androidx.documentfile:documentfile:1.0.0@aar,androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar,androidx.print:print:1.0.0@aar,androidx.annotation:annotation:1.3.0@jar,androidx.annotation:annotation-experimental:1.3.0@aar,org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4@jar,org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4@jar,org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21@jar,org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21@jar,org.jetbrains.kotlin:kotlin-stdlib:1.8.22@jar,org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22@jar,org.jetbrains:annotations:13.0@jar,androidx.tracing:tracing:1.0.0@aar,com.google.code.findbugs:jsr305:2.0.2@jar,com.google.guava:listenablefuture:1.0@jar,androidx.test.espresso:espresso-idling-resource:3.5.1@aar,com.squareup:javawriter:2.1.1@jar,javax.inject:javax.inject:1@jar,androidx.resourceinspection:resourceinspection-annotation:1.0.1@jar">
<dependency
name="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar:unspecified@jar"
simpleName="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar"/>
<dependency
name="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar:unspecified@jar"
simpleName="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar"/>
<dependency
name="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar:unspecified@jar"
simpleName="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar"/>
<dependency
name=":@@:app::debug"
simpleName="artifacts::app"/>
<dependency
name="androidx.test.ext:junit:1.1.5@aar"
simpleName="androidx.test.ext:junit"/>
<dependency
name="androidx.test.espresso:espresso-core:3.5.1@aar"
simpleName="androidx.test.espresso:espresso-core"/>
<dependency
name="com.google.android.material:material:1.10.0@aar"
simpleName="com.google.android.material:material"/>
<dependency
name="androidx.appcompat:appcompat:1.6.1@aar"
simpleName="androidx.appcompat:appcompat"/>
<dependency
name="androidx.viewpager2:viewpager2:1.0.0@aar"
simpleName="androidx.viewpager2:viewpager2"/>
<dependency
name="androidx.fragment:fragment:1.3.6@aar"
simpleName="androidx.fragment:fragment"/>
<dependency
name="androidx.activity:activity:1.8.0@aar"
simpleName="androidx.activity:activity"/>
<dependency
name="androidx.constraintlayout:constraintlayout:2.1.4@aar"
simpleName="androidx.constraintlayout:constraintlayout"/>
<dependency
name="androidx.test:runner:1.5.2@aar"
simpleName="androidx.test:runner"/>
<dependency
name="junit:junit:4.13.2@jar"
simpleName="junit:junit"/>
<dependency
name="org.hamcrest:hamcrest-integration:1.3@jar"
simpleName="org.hamcrest:hamcrest-integration"/>
<dependency
name="org.hamcrest:hamcrest-library:1.3@jar"
simpleName="org.hamcrest:hamcrest-library"/>
<dependency
name="org.hamcrest:hamcrest-core:1.3@jar"
simpleName="org.hamcrest:hamcrest-core"/>
<dependency
name="androidx.test:core:1.5.0@aar"
simpleName="androidx.test:core"/>
<dependency
name="androidx.test.services:storage:1.4.2@aar"
simpleName="androidx.test.services:storage"/>
<dependency
name="androidx.test:monitor:1.6.1@aar"
simpleName="androidx.test:monitor"/>
<dependency
name="androidx.test:annotation:1.0.1@aar"
simpleName="androidx.test:annotation"/>
<dependency
name="androidx.appcompat:appcompat-resources:1.6.1@aar"
simpleName="androidx.appcompat:appcompat-resources"/>
<dependency
name="androidx.drawerlayout:drawerlayout:1.1.1@aar"
simpleName="androidx.drawerlayout:drawerlayout"/>
<dependency
name="androidx.coordinatorlayout:coordinatorlayout:1.1.0@aar"
simpleName="androidx.coordinatorlayout:coordinatorlayout"/>
<dependency
name="androidx.dynamicanimation:dynamicanimation:1.0.0@aar"
simpleName="androidx.dynamicanimation:dynamicanimation"/>
<dependency
name="androidx.transition:transition:1.2.0@aar"
simpleName="androidx.transition:transition"/>
<dependency
name="androidx.vectordrawable:vectordrawable-animated:1.1.0@aar"
simpleName="androidx.vectordrawable:vectordrawable-animated"/>
<dependency
name="androidx.vectordrawable:vectordrawable:1.1.0@aar"
simpleName="androidx.vectordrawable:vectordrawable"/>
<dependency
name="androidx.viewpager:viewpager:1.0.0@aar"
simpleName="androidx.viewpager:viewpager"/>
<dependency
name="androidx.legacy:legacy-support-core-utils:1.0.0@aar"
simpleName="androidx.legacy:legacy-support-core-utils"/>
<dependency
name="androidx.loader:loader:1.0.0@aar"
simpleName="androidx.loader:loader"/>
<dependency
name="androidx.recyclerview:recyclerview:1.1.0@aar"
simpleName="androidx.recyclerview:recyclerview"/>
<dependency
name="androidx.customview:customview:1.1.0@aar"
simpleName="androidx.customview:customview"/>
<dependency
name="androidx.lifecycle:lifecycle-livedata:2.6.1@aar"
simpleName="androidx.lifecycle:lifecycle-livedata"/>
<dependency
name="androidx.lifecycle:lifecycle-livedata-core:2.6.1@aar"
simpleName="androidx.lifecycle:lifecycle-livedata-core"/>
<dependency
name="androidx.lifecycle:lifecycle-common:2.6.1@jar"
simpleName="androidx.lifecycle:lifecycle-common"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel:2.6.1@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel"/>
<dependency
name="androidx.lifecycle:lifecycle-runtime:2.6.1@aar"
simpleName="androidx.lifecycle:lifecycle-runtime"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel-savedstate"/>
<dependency
name="androidx.core:core-ktx:1.2.0@aar"
simpleName="androidx.core:core-ktx"/>
<dependency
name="androidx.core:core:1.9.0@aar"
simpleName="androidx.core:core"/>
<dependency
name="androidx.cursoradapter:cursoradapter:1.0.0@aar"
simpleName="androidx.cursoradapter:cursoradapter"/>
<dependency
name="androidx.cardview:cardview:1.0.0@aar"
simpleName="androidx.cardview:cardview"/>
<dependency
name="androidx.savedstate:savedstate:1.2.1@aar"
simpleName="androidx.savedstate:savedstate"/>
<dependency
name="androidx.concurrent:concurrent-futures:1.1.0@jar"
simpleName="androidx.concurrent:concurrent-futures"/>
<dependency
name="androidx.versionedparcelable:versionedparcelable:1.1.1@aar"
simpleName="androidx.versionedparcelable:versionedparcelable"/>
<dependency
name="androidx.collection:collection:1.1.0@jar"
simpleName="androidx.collection:collection"/>
<dependency
name="androidx.arch.core:core-runtime:2.1.0@aar"
simpleName="androidx.arch.core:core-runtime"/>
<dependency
name="androidx.arch.core:core-common:2.2.0@jar"
simpleName="androidx.arch.core:core-common"/>
<dependency
name="androidx.interpolator:interpolator:1.0.0@aar"
simpleName="androidx.interpolator:interpolator"/>
<dependency
name="androidx.documentfile:documentfile:1.0.0@aar"
simpleName="androidx.documentfile:documentfile"/>
<dependency
name="androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar"
simpleName="androidx.localbroadcastmanager:localbroadcastmanager"/>
<dependency
name="androidx.print:print:1.0.0@aar"
simpleName="androidx.print:print"/>
<dependency
name="androidx.annotation:annotation:1.3.0@jar"
simpleName="androidx.annotation:annotation"/>
<dependency
name="androidx.annotation:annotation-experimental:1.3.0@aar"
simpleName="androidx.annotation:annotation-experimental"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-android"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-jdk8"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-jdk7"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib:1.8.22@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-common"/>
<dependency
name="org.jetbrains:annotations:13.0@jar"
simpleName="org.jetbrains:annotations"/>
<dependency
name="androidx.tracing:tracing:1.0.0@aar"
simpleName="androidx.tracing:tracing"/>
<dependency
name="com.google.code.findbugs:jsr305:2.0.2@jar"
simpleName="com.google.code.findbugs:jsr305"/>
<dependency
name="com.google.guava:listenablefuture:1.0@jar"
simpleName="com.google.guava:listenablefuture"/>
<dependency
name="androidx.test.espresso:espresso-idling-resource:3.5.1@aar"
simpleName="androidx.test.espresso:espresso-idling-resource"/>
<dependency
name="com.squareup:javawriter:2.1.1@jar"
simpleName="com.squareup:javawriter"/>
<dependency
name="javax.inject:javax.inject:1@jar"
simpleName="javax.inject:javax.inject"/>
<dependency
name="androidx.resourceinspection:resourceinspection-annotation:1.0.1@jar"
simpleName="androidx.resourceinspection:resourceinspection-annotation"/>
</compile>
<package
roots="androidx.test.ext:junit:1.1.5@aar,androidx.test.espresso:espresso-core:3.5.1@aar,androidx.test:core:1.5.0@aar,androidx.test:runner:1.5.2@aar,androidx.test.services:storage:1.4.2@aar,androidx.test:monitor:1.6.1@aar,androidx.test:annotation:1.0.1@aar,androidx.lifecycle:lifecycle-common:2.6.1@jar,androidx.tracing:tracing:1.0.0@aar,androidx.concurrent:concurrent-futures:1.1.0@jar,androidx.annotation:annotation:1.3.0@jar,androidx.annotation:annotation-experimental:1.3.0@aar,org.jetbrains.kotlin:kotlin-stdlib:1.8.22@jar,org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4@jar,org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4@jar,org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22@jar,org.jetbrains:annotations:13.0@jar,com.google.guava:listenablefuture:1.0@jar,junit:junit:4.13.2@jar,androidx.test.espresso:espresso-idling-resource:3.5.1@aar,com.squareup:javawriter:2.1.1@jar,javax.inject:javax.inject:1@jar,org.hamcrest:hamcrest-integration:1.3@jar,org.hamcrest:hamcrest-library:1.3@jar,com.google.code.findbugs:jsr305:2.0.2@jar,org.hamcrest:hamcrest-core:1.3@jar">
<dependency
name="androidx.test.ext:junit:1.1.5@aar"
simpleName="androidx.test.ext:junit"/>
<dependency
name="androidx.test.espresso:espresso-core:3.5.1@aar"
simpleName="androidx.test.espresso:espresso-core"/>
<dependency
name="androidx.test:core:1.5.0@aar"
simpleName="androidx.test:core"/>
<dependency
name="androidx.test:runner:1.5.2@aar"
simpleName="androidx.test:runner"/>
<dependency
name="androidx.test.services:storage:1.4.2@aar"
simpleName="androidx.test.services:storage"/>
<dependency
name="androidx.test:monitor:1.6.1@aar"
simpleName="androidx.test:monitor"/>
<dependency
name="androidx.test:annotation:1.0.1@aar"
simpleName="androidx.test:annotation"/>
<dependency
name="androidx.lifecycle:lifecycle-common:2.6.1@jar"
simpleName="androidx.lifecycle:lifecycle-common"/>
<dependency
name="androidx.tracing:tracing:1.0.0@aar"
simpleName="androidx.tracing:tracing"/>
<dependency
name="androidx.concurrent:concurrent-futures:1.1.0@jar"
simpleName="androidx.concurrent:concurrent-futures"/>
<dependency
name="androidx.annotation:annotation:1.3.0@jar"
simpleName="androidx.annotation:annotation"/>
<dependency
name="androidx.annotation:annotation-experimental:1.3.0@aar"
simpleName="androidx.annotation:annotation-experimental"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib:1.8.22@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-android"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-common"/>
<dependency
name="org.jetbrains:annotations:13.0@jar"
simpleName="org.jetbrains:annotations"/>
<dependency
name="com.google.guava:listenablefuture:1.0@jar"
simpleName="com.google.guava:listenablefuture"/>
<dependency
name="junit:junit:4.13.2@jar"
simpleName="junit:junit"/>
<dependency
name="androidx.test.espresso:espresso-idling-resource:3.5.1@aar"
simpleName="androidx.test.espresso:espresso-idling-resource"/>
<dependency
name="com.squareup:javawriter:2.1.1@jar"
simpleName="com.squareup:javawriter"/>
<dependency
name="javax.inject:javax.inject:1@jar"
simpleName="javax.inject:javax.inject"/>
<dependency
name="org.hamcrest:hamcrest-integration:1.3@jar"
simpleName="org.hamcrest:hamcrest-integration"/>
<dependency
name="org.hamcrest:hamcrest-library:1.3@jar"
simpleName="org.hamcrest:hamcrest-library"/>
<dependency
name="com.google.code.findbugs:jsr305:2.0.2@jar"
simpleName="com.google.code.findbugs:jsr305"/>
<dependency
name="org.hamcrest:hamcrest-core:1.3@jar"
simpleName="org.hamcrest:hamcrest-core"/>
</package>
</dependencies>

@ -0,0 +1,715 @@
<libraries>
<library
name="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar:unspecified@jar"
jars="D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar"
resolved="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-osgi-4.5.14.jar:unspecified"
provided="true"/>
<library
name="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar:unspecified@jar"
jars="D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar"
resolved="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpclient-win-4.5.14.jar:unspecified"
provided="true"/>
<library
name="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar:unspecified@jar"
jars="D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar"
resolved="__local_aars__:D:\AnoProject\Last\Notes-master\httpcomponents-client-4.5.14-bin\lib\httpcore-4.4.16.jar:unspecified"
provided="true"/>
<library
name=":@@:app::debug"
project=":app"/>
<library
name="androidx.test.ext:junit:1.1.5@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\b6c9f7f5810a7d8c79312d0b78d59c45\transformed\junit-1.1.5\jars\classes.jar"
resolved="androidx.test.ext:junit:1.1.5"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\b6c9f7f5810a7d8c79312d0b78d59c45\transformed\junit-1.1.5"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.test.espresso:espresso-core:3.5.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\89182593d13ee42a3587eb91636dc9b9\transformed\espresso-core-3.5.1\jars\classes.jar"
resolved="androidx.test.espresso:espresso-core:3.5.1"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\89182593d13ee42a3587eb91636dc9b9\transformed\espresso-core-3.5.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="com.google.android.material:material:1.10.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\ed657c2504032b7a94cb05d64bda34d5\transformed\material-1.10.0\jars\classes.jar"
resolved="com.google.android.material:material:1.10.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\ed657c2504032b7a94cb05d64bda34d5\transformed\material-1.10.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.appcompat:appcompat:1.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\9193172717a5ca3eb1d6453fe3e6bfa7\transformed\appcompat-1.6.1\jars\classes.jar"
resolved="androidx.appcompat:appcompat:1.6.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\9193172717a5ca3eb1d6453fe3e6bfa7\transformed\appcompat-1.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.viewpager2:viewpager2:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\d5e3c0fc96934450134f763386936834\transformed\viewpager2-1.0.0\jars\classes.jar"
resolved="androidx.viewpager2:viewpager2:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\d5e3c0fc96934450134f763386936834\transformed\viewpager2-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.fragment:fragment:1.3.6@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\d7e369ba3abc83dc6eb17d2b9ff2b16e\transformed\fragment-1.3.6\jars\classes.jar"
resolved="androidx.fragment:fragment:1.3.6"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\d7e369ba3abc83dc6eb17d2b9ff2b16e\transformed\fragment-1.3.6"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.activity:activity:1.8.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\4d6dea971ad80dc04c21708a717167ea\transformed\activity-1.8.0\jars\classes.jar"
resolved="androidx.activity:activity:1.8.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\4d6dea971ad80dc04c21708a717167ea\transformed\activity-1.8.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.constraintlayout:constraintlayout:2.1.4@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\870de2a67c9be5b4f7ba5f2fd672777d\transformed\constraintlayout-2.1.4\jars\classes.jar"
resolved="androidx.constraintlayout:constraintlayout:2.1.4"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\870de2a67c9be5b4f7ba5f2fd672777d\transformed\constraintlayout-2.1.4"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.test:runner:1.5.2@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\df60336736dc66cea30c7b8f634610c4\transformed\runner-1.5.2\jars\classes.jar"
resolved="androidx.test:runner:1.5.2"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\df60336736dc66cea30c7b8f634610c4\transformed\runner-1.5.2"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="junit:junit:4.13.2@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\junit\junit\4.13.2\8ac9e16d933b6fb43bc7f576336b8f4d7eb5ba12\junit-4.13.2.jar"
resolved="junit:junit:4.13.2"/>
<library
name="org.hamcrest:hamcrest-integration:1.3@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest-integration\1.3\5de0c73fef18917cd85d0ab70bb23818685e4dfd\hamcrest-integration-1.3.jar"
resolved="org.hamcrest:hamcrest-integration:1.3"/>
<library
name="org.hamcrest:hamcrest-library:1.3@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest-library\1.3\4785a3c21320980282f9f33d0d1264a69040538f\hamcrest-library-1.3.jar"
resolved="org.hamcrest:hamcrest-library:1.3"/>
<library
name="org.hamcrest:hamcrest-core:1.3@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest-core\1.3\42a25dc3219429f0e5d060061f71acb49bf010a0\hamcrest-core-1.3.jar"
resolved="org.hamcrest:hamcrest-core:1.3"/>
<library
name="androidx.test:core:1.5.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3a5a02772014a9756014109c196b8f00\transformed\core-1.5.0\jars\classes.jar"
resolved="androidx.test:core:1.5.0"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3a5a02772014a9756014109c196b8f00\transformed\core-1.5.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.test.services:storage:1.4.2@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\45de79b7e17317b9d6a19f66e182561f\transformed\storage-1.4.2\jars\classes.jar"
resolved="androidx.test.services:storage:1.4.2"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\45de79b7e17317b9d6a19f66e182561f\transformed\storage-1.4.2"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.test:monitor:1.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\fc298d4db7064cc205ce1200ba843036\transformed\monitor-1.6.1\jars\classes.jar"
resolved="androidx.test:monitor:1.6.1"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\fc298d4db7064cc205ce1200ba843036\transformed\monitor-1.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.test:annotation:1.0.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\4b249f4e9d31f10fe508b9bfc181de13\transformed\annotation-1.0.1\jars\classes.jar"
resolved="androidx.test:annotation:1.0.1"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\4b249f4e9d31f10fe508b9bfc181de13\transformed\annotation-1.0.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.appcompat:appcompat-resources:1.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\253ea21f9554755940a8db3922afaeff\transformed\appcompat-resources-1.6.1\jars\classes.jar"
resolved="androidx.appcompat:appcompat-resources:1.6.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\253ea21f9554755940a8db3922afaeff\transformed\appcompat-resources-1.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.drawerlayout:drawerlayout:1.1.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\8aefd914ef407cb79d151c2844281eb1\transformed\drawerlayout-1.1.1\jars\classes.jar"
resolved="androidx.drawerlayout:drawerlayout:1.1.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\8aefd914ef407cb79d151c2844281eb1\transformed\drawerlayout-1.1.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.coordinatorlayout:coordinatorlayout:1.1.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\2f69197fad576b29d6a5e0f895e3aeb9\transformed\coordinatorlayout-1.1.0\jars\classes.jar"
resolved="androidx.coordinatorlayout:coordinatorlayout:1.1.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\2f69197fad576b29d6a5e0f895e3aeb9\transformed\coordinatorlayout-1.1.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.dynamicanimation:dynamicanimation:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\15c4f2ae4253de18a0c7852b333c0870\transformed\dynamicanimation-1.0.0\jars\classes.jar"
resolved="androidx.dynamicanimation:dynamicanimation:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\15c4f2ae4253de18a0c7852b333c0870\transformed\dynamicanimation-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.transition:transition:1.2.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\f090351ecbad81af69788a152edefd31\transformed\transition-1.2.0\jars\classes.jar"
resolved="androidx.transition:transition:1.2.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\f090351ecbad81af69788a152edefd31\transformed\transition-1.2.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.vectordrawable:vectordrawable-animated:1.1.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3fd560b09a657265f043b6181d3cad63\transformed\vectordrawable-animated-1.1.0\jars\classes.jar"
resolved="androidx.vectordrawable:vectordrawable-animated:1.1.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3fd560b09a657265f043b6181d3cad63\transformed\vectordrawable-animated-1.1.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.vectordrawable:vectordrawable:1.1.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\25cc9b6c6f46a5024d85c2da5b360d5f\transformed\vectordrawable-1.1.0\jars\classes.jar"
resolved="androidx.vectordrawable:vectordrawable:1.1.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\25cc9b6c6f46a5024d85c2da5b360d5f\transformed\vectordrawable-1.1.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.viewpager:viewpager:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\de3f4c52d4b0fdcc70f69eab382f3d12\transformed\viewpager-1.0.0\jars\classes.jar"
resolved="androidx.viewpager:viewpager:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\de3f4c52d4b0fdcc70f69eab382f3d12\transformed\viewpager-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.legacy:legacy-support-core-utils:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\dc979c0b8b75e85bf4f176a761287089\transformed\legacy-support-core-utils-1.0.0\jars\classes.jar"
resolved="androidx.legacy:legacy-support-core-utils:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\dc979c0b8b75e85bf4f176a761287089\transformed\legacy-support-core-utils-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.loader:loader:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\e83b86d57eb58c7c76ab2665efee131c\transformed\loader-1.0.0\jars\classes.jar"
resolved="androidx.loader:loader:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\e83b86d57eb58c7c76ab2665efee131c\transformed\loader-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.recyclerview:recyclerview:1.1.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\71f6c76cdbc8be36c07e3dc59644ba39\transformed\recyclerview-1.1.0\jars\classes.jar"
resolved="androidx.recyclerview:recyclerview:1.1.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\71f6c76cdbc8be36c07e3dc59644ba39\transformed\recyclerview-1.1.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.customview:customview:1.1.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\46a1220a5d503e2a05755c314bee8b16\transformed\customview-1.1.0\jars\classes.jar"
resolved="androidx.customview:customview:1.1.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\46a1220a5d503e2a05755c314bee8b16\transformed\customview-1.1.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-livedata:2.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\8fdc621be8d3dd6a3c8f1f413cf45d5f\transformed\lifecycle-livedata-2.6.1\jars\classes.jar"
resolved="androidx.lifecycle:lifecycle-livedata:2.6.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\8fdc621be8d3dd6a3c8f1f413cf45d5f\transformed\lifecycle-livedata-2.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-livedata-core:2.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\0316481e296926d0b7aaa92fc9d0879d\transformed\lifecycle-livedata-core-2.6.1\jars\classes.jar"
resolved="androidx.lifecycle:lifecycle-livedata-core:2.6.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\0316481e296926d0b7aaa92fc9d0879d\transformed\lifecycle-livedata-core-2.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-common:2.6.1@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\androidx.lifecycle\lifecycle-common\2.6.1\10f354fdb64868baecd67128560c5a0d6312c495\lifecycle-common-2.6.1.jar"
resolved="androidx.lifecycle:lifecycle-common:2.6.1"/>
<library
name="androidx.lifecycle:lifecycle-viewmodel:2.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\aa81dc7b2bc51662cef11e0791bbccc9\transformed\lifecycle-viewmodel-2.6.1\jars\classes.jar"
resolved="androidx.lifecycle:lifecycle-viewmodel:2.6.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\aa81dc7b2bc51662cef11e0791bbccc9\transformed\lifecycle-viewmodel-2.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-runtime:2.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\bf4089128f1f860ab38b60b53569d520\transformed\lifecycle-runtime-2.6.1\jars\classes.jar"
resolved="androidx.lifecycle:lifecycle-runtime:2.6.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\bf4089128f1f860ab38b60b53569d520\transformed\lifecycle-runtime-2.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\85be53262d2521c6dcf63c409a54c35e\transformed\lifecycle-viewmodel-savedstate-2.6.1\jars\classes.jar"
resolved="androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\85be53262d2521c6dcf63c409a54c35e\transformed\lifecycle-viewmodel-savedstate-2.6.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.core:core-ktx:1.2.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\4861d38e2ff187d18767fe375f974e75\transformed\core-ktx-1.2.0\jars\classes.jar"
resolved="androidx.core:core-ktx:1.2.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\4861d38e2ff187d18767fe375f974e75\transformed\core-ktx-1.2.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.core:core:1.9.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\7699c2b1350bc9ca59e9ccf72b7bc4e9\transformed\core-1.9.0\jars\classes.jar"
resolved="androidx.core:core:1.9.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\7699c2b1350bc9ca59e9ccf72b7bc4e9\transformed\core-1.9.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.cursoradapter:cursoradapter:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\7e23495443aa5b2a0afac798e6faa601\transformed\cursoradapter-1.0.0\jars\classes.jar"
resolved="androidx.cursoradapter:cursoradapter:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\7e23495443aa5b2a0afac798e6faa601\transformed\cursoradapter-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.cardview:cardview:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\a0953f93c0e20abd38f655613f7b3a90\transformed\cardview-1.0.0\jars\classes.jar"
resolved="androidx.cardview:cardview:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\a0953f93c0e20abd38f655613f7b3a90\transformed\cardview-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.savedstate:savedstate:1.2.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3cd917734a573e15a1ed51b3d437c18f\transformed\savedstate-1.2.1\jars\classes.jar"
resolved="androidx.savedstate:savedstate:1.2.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3cd917734a573e15a1ed51b3d437c18f\transformed\savedstate-1.2.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.concurrent:concurrent-futures:1.1.0@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\androidx.concurrent\concurrent-futures\1.1.0\50b7fb98350d5f42a4e49704b03278542293ba48\concurrent-futures-1.1.0.jar"
resolved="androidx.concurrent:concurrent-futures:1.1.0"/>
<library
name="androidx.versionedparcelable:versionedparcelable:1.1.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\f82167c09e6ae91837d5b49ea1000efe\transformed\versionedparcelable-1.1.1\jars\classes.jar"
resolved="androidx.versionedparcelable:versionedparcelable:1.1.1"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\f82167c09e6ae91837d5b49ea1000efe\transformed\versionedparcelable-1.1.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.collection:collection:1.1.0@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\androidx.collection\collection\1.1.0\1f27220b47669781457de0d600849a5de0e89909\collection-1.1.0.jar"
resolved="androidx.collection:collection:1.1.0"
provided="true"/>
<library
name="androidx.arch.core:core-runtime:2.1.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3b285c6290f03d5ff20782acfa036713\transformed\core-runtime-2.1.0\jars\classes.jar"
resolved="androidx.arch.core:core-runtime:2.1.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\3b285c6290f03d5ff20782acfa036713\transformed\core-runtime-2.1.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.arch.core:core-common:2.2.0@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\androidx.arch.core\core-common\2.2.0\5e1b8b81dfd5f52c56a8d53b18ca759c19a301f3\core-common-2.2.0.jar"
resolved="androidx.arch.core:core-common:2.2.0"
provided="true"/>
<library
name="androidx.interpolator:interpolator:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\0d41002bdfd7c1dabad725943b1ed8e9\transformed\interpolator-1.0.0\jars\classes.jar"
resolved="androidx.interpolator:interpolator:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\0d41002bdfd7c1dabad725943b1ed8e9\transformed\interpolator-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.documentfile:documentfile:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\53b765b4f3e71482b1bc2f1c233d0225\transformed\documentfile-1.0.0\jars\classes.jar"
resolved="androidx.documentfile:documentfile:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\53b765b4f3e71482b1bc2f1c233d0225\transformed\documentfile-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\6df0be6c3fac32bc396c1462157bc500\transformed\localbroadcastmanager-1.0.0\jars\classes.jar"
resolved="androidx.localbroadcastmanager:localbroadcastmanager:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\6df0be6c3fac32bc396c1462157bc500\transformed\localbroadcastmanager-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.print:print:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\8a8e23bd4d6d86f3c9260a14e3fb93d7\transformed\print-1.0.0\jars\classes.jar"
resolved="androidx.print:print:1.0.0"
provided="true"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\8a8e23bd4d6d86f3c9260a14e3fb93d7\transformed\print-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.annotation:annotation:1.3.0@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\androidx.annotation\annotation\1.3.0\21f49f5f9b85fc49de712539f79123119740595\annotation-1.3.0.jar"
resolved="androidx.annotation:annotation:1.3.0"/>
<library
name="androidx.annotation:annotation-experimental:1.3.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\85ce0127863c5903b3a85662f2e1090e\transformed\annotation-experimental-1.3.0\jars\classes.jar"
resolved="androidx.annotation:annotation-experimental:1.3.0"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\85ce0127863c5903b3a85662f2e1090e\transformed\annotation-experimental-1.3.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlinx\kotlinx-coroutines-core-jvm\1.6.4\2c997cd1c0ef33f3e751d3831929aeff1390cb30\kotlinx-coroutines-core-jvm-1.6.4.jar"
resolved="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4"/>
<library
name="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlinx\kotlinx-coroutines-android\1.6.4\f955fc8b2ad196e2f4429598440e15f7492eeb2b\kotlinx-coroutines-android-1.6.4.jar"
resolved="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"/>
<library
name="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk8\1.6.21\eeb4d60d75e9ea9c11200d52974e522793b14fba\kotlin-stdlib-jdk8-1.6.21.jar"
resolved="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21"
provided="true"/>
<library
name="org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk7\1.6.21\568c1b78a8e17a4f35b31f0a74e2916095ed74c2\kotlin-stdlib-jdk7-1.6.21.jar"
resolved="org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21"
provided="true"/>
<library
name="org.jetbrains.kotlin:kotlin-stdlib:1.8.22@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.8.22\636bf8b320e7627482771bbac9ed7246773c02bd\kotlin-stdlib-1.8.22.jar"
resolved="org.jetbrains.kotlin:kotlin-stdlib:1.8.22"/>
<library
name="org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-common\1.8.22\1a8e3601703ae14bb58757ea6b2d8e8e5935a586\kotlin-stdlib-common-1.8.22.jar"
resolved="org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22"/>
<library
name="org.jetbrains:annotations:13.0@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar"
resolved="org.jetbrains:annotations:13.0"/>
<library
name="androidx.tracing:tracing:1.0.0@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\9c51bb1fa58bd8be09c4e0e0ecfd97c7\transformed\tracing-1.0.0\jars\classes.jar"
resolved="androidx.tracing:tracing:1.0.0"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\9c51bb1fa58bd8be09c4e0e0ecfd97c7\transformed\tracing-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="com.google.code.findbugs:jsr305:2.0.2@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\com.google.code.findbugs\jsr305\2.0.2\516c03b21d50a644d538de0f0369c620989cd8f0\jsr305-2.0.2.jar"
resolved="com.google.code.findbugs:jsr305:2.0.2"/>
<library
name="com.google.guava:listenablefuture:1.0@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\com.google.guava\listenablefuture\1.0\c949a840a6acbc5268d088e47b04177bf90b3cad\listenablefuture-1.0.jar"
resolved="com.google.guava:listenablefuture:1.0"/>
<library
name="androidx.test.espresso:espresso-idling-resource:3.5.1@aar"
jars="C:\Users\fancanyu\.gradle\caches\8.13\transforms\cce65420969f7fad7f5f2a1452629005\transformed\espresso-idling-resource-3.5.1\jars\classes.jar"
resolved="androidx.test.espresso:espresso-idling-resource:3.5.1"
folder="C:\Users\fancanyu\.gradle\caches\8.13\transforms\cce65420969f7fad7f5f2a1452629005\transformed\espresso-idling-resource-3.5.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="com.squareup:javawriter:2.1.1@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\com.squareup\javawriter\2.1.1\67ff45d9ae02e583d0f9b3432a5ebbe05c30c966\javawriter-2.1.1.jar"
resolved="com.squareup:javawriter:2.1.1"/>
<library
name="javax.inject:javax.inject:1@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\javax.inject\javax.inject\1\6975da39a7040257bd51d21a231b76c915872d38\javax.inject-1.jar"
resolved="javax.inject:javax.inject:1"/>
<library
name="androidx.resourceinspection:resourceinspection-annotation:1.0.1@jar"
jars="C:\Users\fancanyu\.gradle\caches\modules-2\files-2.1\androidx.resourceinspection\resourceinspection-annotation\1.0.1\8c21f8ff5d96d5d52c948707f7e4d6ca6773feef\resourceinspection-annotation-1.0.1.jar"
resolved="androidx.resourceinspection:resourceinspection-annotation:1.0.1"
provided="true"/>
</libraries>

@ -0,0 +1,30 @@
<variant
name="debug"
package="net.micode.notes"
minSdkVersion="32"
targetSdkVersion="36.0"
debuggable="true"
mergedManifest="build\intermediates\merged_manifest\debug\processDebugMainManifest\AndroidManifest.xml"
manifestMergeReport="build\outputs\logs\manifest-merger-debug-report.txt"
partialResultsDir="build\intermediates\android_test_lint_partial_results\debug\lintAnalyzeDebugAndroidTest\out">
<buildFeatures
namespacing="REQUIRED"/>
<sourceProviders>
</sourceProviders>
<testSourceProviders>
<sourceProvider
manifests="src\androidTest\AndroidManifest.xml"
javaDirectories="src\androidTest\java;src\androidTestDebug\java;src\androidTest\kotlin;src\androidTestDebug\kotlin"
resDirectories="src\androidTest\res;src\androidTestDebug\res"
assetsDirectories="src\androidTest\assets;src\androidTestDebug\assets"
androidTest="true"/>
</testSourceProviders>
<testFixturesSourceProviders>
</testFixturesSourceProviders>
<artifact
type="INSTRUMENTATION_TEST"
applicationId="net.micode.notes.test"
generatedResourceFolders="build\generated\res\resValues\androidTest\debug"
desugaredMethodsFiles="C:\Users\fancanyu\.gradle\caches\8.13\transforms\e78e78f569d97755fcc85df5c4ee4f92\transformed\D8BackportedDesugaredMethods.txt">
</artifact>
</variant>

@ -0,0 +1,26 @@
<lint-module
format="1"
dir="D:\AnoProject\Last\Notes-master\app"
name=":app"
type="APP"
maven="Notes-master:app:unspecified"
agpVersion="8.13.0"
buildFolder="build"
bootClassPath="D:\AndroidSdk\platforms\android-36\android.jar;D:\AndroidSdk\build-tools\35.0.0\core-lambda-stubs.jar"
javaSourceLevel="11"
compileTarget="android-36"
neverShrinking="true">
<lintOptions
disable="GestureBackNavigation"
abortOnError="true"
absolutePaths="true"
checkReleaseBuilds="true"
explainIssues="true">
<severities>
<severity
id="GestureBackNavigation"
severity="IGNORE" />
</severities>
</lintOptions>
<variant name="debug"/>
</lint-module>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<incidents format="6" by="lint 8.13.0" type="configured_issues">
<config id="GestureBackNavigation" severity="ignore"/>
</incidents>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<incidents format="6" by="lint 8.13.0" type="partial_results">
<map id="UnusedResources">
<entry
name="model"
string=""/>
</map>
</incidents>

@ -0,0 +1,21 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "net.micode.notes.test",
"variantName": "debugAndroidTest",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 0,
"versionName": "",
"outputFile": "app-debug-androidTest.apk"
}
],
"elementType": "File",
"minSdkVersionForDexing": 32
}

@ -1,21 +0,0 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "net.micode.notes",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "app-debug.apk"
}
],
"elementType": "File",
"minSdkVersionForDexing": 30
}

@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../../outputs/apk/release/output-metadata.json

@ -0,0 +1,864 @@
# Baseline profiles for androidx.appcompat
HSPLandroidx/appcompat/R$styleable;-><clinit>()V
HSPLandroidx/appcompat/app/ActionBar$LayoutParams;-><init>(II)V
HSPLandroidx/appcompat/app/ActionBar;-><init>()V
HSPLandroidx/appcompat/app/AppCompatActivity$1;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V
HSPLandroidx/appcompat/app/AppCompatActivity$2;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V
HSPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V
HSPLandroidx/appcompat/app/AppCompatActivity;-><init>()V
HSPLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V
HSPLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate;
HSPLandroidx/appcompat/app/AppCompatActivity;->getMenuInflater()Landroid/view/MenuInflater;
HSPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources;
HSPLandroidx/appcompat/app/AppCompatActivity;->initDelegate()V
HSPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V
HSPLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V
HSPLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V
HSPLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V
HSPLandroidx/appcompat/app/AppCompatActivity;->onStart()V
HSPLandroidx/appcompat/app/AppCompatActivity;->onSupportContentChanged()V
HSPLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V
HSPLandroidx/appcompat/app/AppCompatActivity;->setContentView(I)V
HSPLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V
HSPLandroidx/appcompat/app/AppCompatDelegate;-><clinit>()V
HSPLandroidx/appcompat/app/AppCompatDelegate;-><init>()V
HSPLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V
HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext(Landroid/content/Context;)V
HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;
HSPLandroidx/appcompat/app/AppCompatDelegate;->create(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)Landroidx/appcompat/app/AppCompatDelegate;
HSPLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I
HSPLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->run()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onAttachedFromWindow()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$ActionMenuPresenterCallback;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl;->createConfigurationContext(Landroid/content/Context;Landroid/content/res/Configuration;)Landroid/content/Context;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onCreatePanelMenu(ILandroid/view/Menu;)Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onCreatePanelView(I)Landroid/view/View;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;-><init>(I)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;->setMenu(Landroidx/appcompat/view/menu/MenuBuilder;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;-><clinit>()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;-><init>(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;-><init>(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyDayNight()Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyDayNight(Z)Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyFixedSizeWindow()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateNightMode()I
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideConfigurationForDayNight(Landroid/content/Context;ILandroid/content/res/Configuration;)Landroid/content/res/Configuration;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createSubDecor()Landroid/view/ViewGroup;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getMenuInflater()Landroid/view/MenuInflater;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(IZ)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getSupportActionBar()Landroidx/appcompat/app/ActionBar;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getTitle()Ljava/lang/CharSequence;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getWindowCallback()Landroid/view/Window$Callback;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->initializePanelMenu(Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;)Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidatePanelMenu(I)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->isActivityManifestHandlingUiMode()Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate(Landroid/os/Bundle;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate(Landroid/os/Bundle;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onSubDecorInstalled(Landroid/view/ViewGroup;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->peekSupportActionBar()Landroidx/appcompat/app/ActionBar;
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->preparePanel(Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;Landroid/view/KeyEvent;)Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->sanitizeWindowFeatureId(I)I
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(I)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateForNightMode(IZ)Z
HSPLandroidx/appcompat/app/AppCompatViewInflater;-><clinit>()V
HSPLandroidx/appcompat/app/AppCompatViewInflater;-><init>()V
HSPLandroidx/appcompat/app/AppCompatViewInflater;->backportAccessibilityAttributes(Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/app/AppCompatViewInflater;->checkOnClickListener(Landroid/view/View;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createButton(Landroid/content/Context;Landroid/util/AttributeSet;)Landroidx/appcompat/widget/AppCompatButton;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createEditText(Landroid/content/Context;Landroid/util/AttributeSet;)Landroidx/appcompat/widget/AppCompatEditText;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createTextView(Landroid/content/Context;Landroid/util/AttributeSet;)Landroidx/appcompat/widget/AppCompatTextView;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/content/Context;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;ZZZZ)Landroid/view/View;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->themifyContext(Landroid/content/Context;Landroid/util/AttributeSet;ZZ)Landroid/content/Context;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->verifyNotNull(Landroid/view/View;Ljava/lang/String;)V
HSPLandroidx/appcompat/app/WindowDecorActionBar$1;-><init>(Landroidx/appcompat/app/WindowDecorActionBar;)V
HSPLandroidx/appcompat/app/WindowDecorActionBar$2;-><init>(Landroidx/appcompat/app/WindowDecorActionBar;)V
HSPLandroidx/appcompat/app/WindowDecorActionBar$3;-><init>(Landroidx/appcompat/app/WindowDecorActionBar;)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;-><clinit>()V
HSPLandroidx/appcompat/app/WindowDecorActionBar;-><init>(Landroid/app/Activity;Z)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->getDecorToolbar(Landroid/view/View;)Landroidx/appcompat/widget/DecorToolbar;
HSPLandroidx/appcompat/app/WindowDecorActionBar;->getNavigationMode()I
HSPLandroidx/appcompat/app/WindowDecorActionBar;->getThemedContext()Landroid/content/Context;
HSPLandroidx/appcompat/app/WindowDecorActionBar;->init(Landroid/view/View;)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->onWindowVisibilityChanged(I)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->setDefaultDisplayHomeAsUpEnabled(Z)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->setDisplayHomeAsUpEnabled(Z)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->setDisplayOptions(II)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->setElevation(F)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->setHasEmbeddedTabs(Z)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->setHomeButtonEnabled(Z)V
HSPLandroidx/appcompat/app/WindowDecorActionBar;->setShowHideAnimationEnabled(Z)V
HSPLandroidx/appcompat/view/ActionBarPolicy;-><init>(Landroid/content/Context;)V
HSPLandroidx/appcompat/view/ActionBarPolicy;->enableHomeButtonByDefault()Z
HSPLandroidx/appcompat/view/ActionBarPolicy;->get(Landroid/content/Context;)Landroidx/appcompat/view/ActionBarPolicy;
HSPLandroidx/appcompat/view/ActionBarPolicy;->getEmbeddedMenuWidthLimit()I
HSPLandroidx/appcompat/view/ActionBarPolicy;->getMaxActionButtons()I
HSPLandroidx/appcompat/view/ActionBarPolicy;->hasEmbeddedTabs()Z
HSPLandroidx/appcompat/view/ActionBarPolicy;->showsOverflowMenuButton()Z
HSPLandroidx/appcompat/view/ContextThemeWrapper;-><init>(Landroid/content/Context;I)V
HSPLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V
HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;
HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
HSPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
HSPLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
HSPLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V
HSPLandroidx/appcompat/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
HSPLandroidx/appcompat/view/SupportMenuInflater;-><clinit>()V
HSPLandroidx/appcompat/view/SupportMenuInflater;-><init>(Landroid/content/Context;)V
HSPLandroidx/appcompat/view/WindowCallbackWrapper;-><init>(Landroid/view/Window$Callback;)V
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback;
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onCreatePanelMenu(ILandroid/view/Menu;)Z
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onCreatePanelView(I)Landroid/view/View;
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V
HSPLandroidx/appcompat/view/menu/ActionMenuItem;-><init>(Landroid/content/Context;IIIILjava/lang/CharSequence;)V
HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;-><init>(Landroid/content/Context;II)V
HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->initForMenu(Landroid/content/Context;Landroidx/appcompat/view/menu/MenuBuilder;)V
HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->setCallback(Landroidx/appcompat/view/menu/MenuPresenter$Callback;)V
HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->setId(I)V
HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->updateMenuView(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;-><clinit>()V
HSPLandroidx/appcompat/view/menu/MenuBuilder;-><init>(Landroid/content/Context;)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->addMenuPresenter(Landroidx/appcompat/view/menu/MenuPresenter;Landroid/content/Context;)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->dispatchPresenterUpdate(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->flagActionItems()V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->getActionItems()Ljava/util/ArrayList;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->getNonActionItems()Ljava/util/ArrayList;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->getVisibleItems()Ljava/util/ArrayList;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->hasVisibleItems()Z
HSPLandroidx/appcompat/view/menu/MenuBuilder;->onItemsChanged(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->setCallback(Landroidx/appcompat/view/menu/MenuBuilder$Callback;)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->setOverrideVisibleItems(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->setQwertyMode(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->setShortcutsVisibleInner(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->size()I
HSPLandroidx/appcompat/view/menu/MenuBuilder;->startDispatchingItemsChanged()V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->stopDispatchingItemsChanged()V
HSPLandroidx/appcompat/widget/AbsActionBarView$VisibilityAnimListener;-><init>(Landroidx/appcompat/widget/AbsActionBarView;)V
HSPLandroidx/appcompat/widget/AbsActionBarView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/ActionBarBackgroundDrawable;-><init>(Landroidx/appcompat/widget/ActionBarContainer;)V
HSPLandroidx/appcompat/widget/ActionBarBackgroundDrawable;->draw(Landroid/graphics/Canvas;)V
HSPLandroidx/appcompat/widget/ActionBarBackgroundDrawable;->getOpacity()I
HSPLandroidx/appcompat/widget/ActionBarBackgroundDrawable;->getOutline(Landroid/graphics/Outline;)V
HSPLandroidx/appcompat/widget/ActionBarContainer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/ActionBarContainer;->drawableStateChanged()V
HSPLandroidx/appcompat/widget/ActionBarContainer;->jumpDrawablesToCurrentState()V
HSPLandroidx/appcompat/widget/ActionBarContainer;->onFinishInflate()V
HSPLandroidx/appcompat/widget/ActionBarContainer;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/ActionBarContainer;->onMeasure(II)V
HSPLandroidx/appcompat/widget/ActionBarContainer;->setTabContainer(Landroidx/appcompat/widget/ScrollingTabContainerView;)V
HSPLandroidx/appcompat/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout$1;-><init>(Landroidx/appcompat/widget/ActionBarOverlayLayout;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout$2;-><init>(Landroidx/appcompat/widget/ActionBarOverlayLayout;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout$3;-><init>(Landroidx/appcompat/widget/ActionBarOverlayLayout;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;-><clinit>()V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->applyInsets(Landroid/view/View;Landroid/graphics/Rect;ZZZZ)Z
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroidx/appcompat/widget/ActionBarOverlayLayout$LayoutParams;
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->getDecorToolbar(Landroid/view/View;)Landroidx/appcompat/widget/DecorToolbar;
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->init(Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->onMeasure(II)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;II)Z
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->onWindowVisibilityChanged(I)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->pullChildren()V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->setActionBarVisibilityCallback(Landroidx/appcompat/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->setHasNonEmbeddedTabs(Z)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->setMenu(Landroid/view/Menu;Landroidx/appcompat/view/menu/MenuPresenter$Callback;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->setMenuPrepared()V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->setWindowCallback(Landroid/view/Window$Callback;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->setWindowTitle(Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/widget/ActionBarOverlayLayout;->shouldDelayChildPressedState()Z
HSPLandroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton$1;-><init>(Landroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton;Landroid/view/View;Landroidx/appcompat/widget/ActionMenuPresenter;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton;-><init>(Landroidx/appcompat/widget/ActionMenuPresenter;Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter$PopupPresenterCallback;-><init>(Landroidx/appcompat/widget/ActionMenuPresenter;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter;-><init>(Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->flagActionItems()Z
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->initForMenu(Landroid/content/Context;Landroidx/appcompat/view/menu/MenuBuilder;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setExpandedActionViewsExclusive(Z)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setMenuView(Landroidx/appcompat/widget/ActionMenuView;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->updateMenuView(Z)V
HSPLandroidx/appcompat/widget/ActionMenuView;-><init>(Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/ActionMenuView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/ActionMenuView;->initialize(Landroidx/appcompat/view/menu/MenuBuilder;)V
HSPLandroidx/appcompat/widget/ActionMenuView;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/ActionMenuView;->onMeasure(II)V
HSPLandroidx/appcompat/widget/ActionMenuView;->peekMenu()Landroidx/appcompat/view/menu/MenuBuilder;
HSPLandroidx/appcompat/widget/ActionMenuView;->setMenuCallbacks(Landroidx/appcompat/view/menu/MenuPresenter$Callback;Landroidx/appcompat/view/menu/MenuBuilder$Callback;)V
HSPLandroidx/appcompat/widget/ActionMenuView;->setOnMenuItemClickListener(Landroidx/appcompat/widget/ActionMenuView$OnMenuItemClickListener;)V
HSPLandroidx/appcompat/widget/ActionMenuView;->setOverflowReserved(Z)V
HSPLandroidx/appcompat/widget/ActionMenuView;->setPopupTheme(I)V
HSPLandroidx/appcompat/widget/ActionMenuView;->setPresenter(Landroidx/appcompat/widget/ActionMenuPresenter;)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;-><init>(Landroid/view/View;)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->applySupportBackgroundTint()V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->shouldApplyFrameworkTintUsingColorFilter()Z
HSPLandroidx/appcompat/widget/AppCompatButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/AppCompatButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatButton;->drawableStateChanged()V
HSPLandroidx/appcompat/widget/AppCompatButton;->getEmojiTextViewHelper()Landroidx/appcompat/widget/AppCompatEmojiTextHelper;
HSPLandroidx/appcompat/widget/AppCompatButton;->onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
HSPLandroidx/appcompat/widget/AppCompatButton;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V
HSPLandroidx/appcompat/widget/AppCompatButton;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/AppCompatButton;->onTextChanged(Ljava/lang/CharSequence;III)V
HSPLandroidx/appcompat/widget/AppCompatButton;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatButton;->setFilters([Landroid/text/InputFilter;)V
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;-><init>()V
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains([II)Z
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;-><clinit>()V
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;-><init>()V
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V
HSPLandroidx/appcompat/widget/AppCompatEditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/AppCompatEditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatEditText;->drawableStateChanged()V
HSPLandroidx/appcompat/widget/AppCompatEditText;->getText()Landroid/text/Editable;
HSPLandroidx/appcompat/widget/AppCompatEditText;->getText()Ljava/lang/CharSequence;
HSPLandroidx/appcompat/widget/AppCompatEditText;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatEditText;->setKeyListener(Landroid/text/method/KeyListener;)V
HSPLandroidx/appcompat/widget/AppCompatEmojiEditTextHelper;-><init>(Landroid/widget/EditText;)V
HSPLandroidx/appcompat/widget/AppCompatEmojiEditTextHelper;->getKeyListener(Landroid/text/method/KeyListener;)Landroid/text/method/KeyListener;
HSPLandroidx/appcompat/widget/AppCompatEmojiEditTextHelper;->initKeyListener()V
HSPLandroidx/appcompat/widget/AppCompatEmojiEditTextHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatEmojiEditTextHelper;->setEnabled(Z)V
HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;-><init>(Landroid/widget/TextView;)V
HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->getFilters([Landroid/text/InputFilter;)[Landroid/text/InputFilter;
HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->setEnabled(Z)V
HSPLandroidx/appcompat/widget/AppCompatImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatImageButton;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatImageButton;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatImageHelper;-><init>(Landroid/widget/ImageView;)V
HSPLandroidx/appcompat/widget/AppCompatImageHelper;->applyImageLevel()V
HSPLandroidx/appcompat/widget/AppCompatImageHelper;->applySupportImageTint()V
HSPLandroidx/appcompat/widget/AppCompatImageHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatImageView;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatTextClassifierHelper;-><init>(Landroid/widget/TextView;)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper$1;-><init>(Landroidx/appcompat/widget/AppCompatTextHelper;IILjava/lang/ref/WeakReference;)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper$1;->onFontRetrievalFailed(I)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;-><init>(Landroid/widget/TextView;)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->applyCompoundDrawablesTints()V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->createTintInfo(Landroid/content/Context;Landroidx/appcompat/widget/AppCompatDrawableManager;I)Landroidx/appcompat/widget/TintInfo;
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->onSetTextAppearance(Landroid/content/Context;I)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->updateTypefaceAndStyle(Landroid/content/Context;Landroidx/appcompat/widget/TintTypedArray;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;-><init>(Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->consumeTextFutureAndSetBlocking()V
HSPLandroidx/appcompat/widget/AppCompatTextView;->drawableStateChanged()V
HSPLandroidx/appcompat/widget/AppCompatTextView;->getEmojiTextViewHelper()Landroidx/appcompat/widget/AppCompatEmojiTextHelper;
HSPLandroidx/appcompat/widget/AppCompatTextView;->getText()Ljava/lang/CharSequence;
HSPLandroidx/appcompat/widget/AppCompatTextView;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->onMeasure(II)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->onTextChanged(Ljava/lang/CharSequence;III)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setFilters([Landroid/text/InputFilter;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setTextAppearance(Landroid/content/Context;I)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setTypeface(Landroid/graphics/Typeface;I)V
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl23;-><init>()V
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl29;-><init>()V
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl;-><init>()V
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;-><clinit>()V
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;-><init>(Landroid/widget/TextView;)V
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->getAutoSizeTextType()I
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->supportsAutoSizeText()Z
HSPLandroidx/appcompat/widget/ContentFrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/ContentFrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue;
HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue;
HSPLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V
HSPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V
HSPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V
HSPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V
HSPLandroidx/appcompat/widget/ForwardingListener;-><init>(Landroid/view/View;)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->getVirtualChildCount()I
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->layoutHorizontal(IIII)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->measureHorizontal(II)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->onMeasure(II)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->setBaselineAligned(Z)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->setDividerDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/RtlSpacingHelper;-><init>()V
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->getEnd()I
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->getStart()I
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->setAbsolute(II)V
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->setDirection(Z)V
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->setRelative(II)V
HSPLandroidx/appcompat/widget/ThemeUtils;-><clinit>()V
HSPLandroidx/appcompat/widget/ThemeUtils;->checkAppCompatTheme(Landroid/view/View;Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/TintContextWrapper;-><clinit>()V
HSPLandroidx/appcompat/widget/TintContextWrapper;->shouldWrap(Landroid/content/Context;)Z
HSPLandroidx/appcompat/widget/TintContextWrapper;->wrap(Landroid/content/Context;)Landroid/content/Context;
HSPLandroidx/appcompat/widget/TintTypedArray;-><init>(Landroid/content/Context;Landroid/content/res/TypedArray;)V
HSPLandroidx/appcompat/widget/TintTypedArray;->getBoolean(IZ)Z
HSPLandroidx/appcompat/widget/TintTypedArray;->getColor(II)I
HSPLandroidx/appcompat/widget/TintTypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;
HSPLandroidx/appcompat/widget/TintTypedArray;->getDimension(IF)F
HSPLandroidx/appcompat/widget/TintTypedArray;->getDimensionPixelOffset(II)I
HSPLandroidx/appcompat/widget/TintTypedArray;->getDimensionPixelSize(II)I
HSPLandroidx/appcompat/widget/TintTypedArray;->getDrawable(I)Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/TintTypedArray;->getFloat(IF)F
HSPLandroidx/appcompat/widget/TintTypedArray;->getFont(IILandroidx/core/content/res/ResourcesCompat$FontCallback;)Landroid/graphics/Typeface;
HSPLandroidx/appcompat/widget/TintTypedArray;->getInt(II)I
HSPLandroidx/appcompat/widget/TintTypedArray;->getInteger(II)I
HSPLandroidx/appcompat/widget/TintTypedArray;->getLayoutDimension(II)I
HSPLandroidx/appcompat/widget/TintTypedArray;->getResourceId(II)I
HSPLandroidx/appcompat/widget/TintTypedArray;->getString(I)Ljava/lang/String;
HSPLandroidx/appcompat/widget/TintTypedArray;->getText(I)Ljava/lang/CharSequence;
HSPLandroidx/appcompat/widget/TintTypedArray;->getWrappedTypeArray()Landroid/content/res/TypedArray;
HSPLandroidx/appcompat/widget/TintTypedArray;->hasValue(I)Z
HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;I[I)Landroidx/appcompat/widget/TintTypedArray;
HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[I)Landroidx/appcompat/widget/TintTypedArray;
HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[III)Landroidx/appcompat/widget/TintTypedArray;
HSPLandroidx/appcompat/widget/TintTypedArray;->recycle()V
HSPLandroidx/appcompat/widget/Toolbar$$ExternalSyntheticLambda0;-><init>(Landroidx/appcompat/widget/Toolbar;)V
HSPLandroidx/appcompat/widget/Toolbar$1;-><init>(Landroidx/appcompat/widget/Toolbar;)V
HSPLandroidx/appcompat/widget/Toolbar$2;-><init>(Landroidx/appcompat/widget/Toolbar;)V
HSPLandroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;-><init>(Landroidx/appcompat/widget/Toolbar;)V
HSPLandroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;->flagActionItems()Z
HSPLandroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;->initForMenu(Landroid/content/Context;Landroidx/appcompat/view/menu/MenuBuilder;)V
HSPLandroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;->updateMenuView(Z)V
HSPLandroidx/appcompat/widget/Toolbar$LayoutParams;-><init>(II)V
HSPLandroidx/appcompat/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/Toolbar;->addCustomViewsWithGravity(Ljava/util/List;I)V
HSPLandroidx/appcompat/widget/Toolbar;->addSystemView(Landroid/view/View;Z)V
HSPLandroidx/appcompat/widget/Toolbar;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
HSPLandroidx/appcompat/widget/Toolbar;->ensureContentInsets()V
HSPLandroidx/appcompat/widget/Toolbar;->ensureMenuView()V
HSPLandroidx/appcompat/widget/Toolbar;->ensureNavButtonView()V
HSPLandroidx/appcompat/widget/Toolbar;->generateDefaultLayoutParams()Landroidx/appcompat/widget/Toolbar$LayoutParams;
HSPLandroidx/appcompat/widget/Toolbar;->getChildTop(Landroid/view/View;I)I
HSPLandroidx/appcompat/widget/Toolbar;->getChildVerticalGravity(I)I
HSPLandroidx/appcompat/widget/Toolbar;->getContentInsetEnd()I
HSPLandroidx/appcompat/widget/Toolbar;->getContentInsetStart()I
HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetEnd()I
HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetLeft()I
HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetRight()I
HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetStart()I
HSPLandroidx/appcompat/widget/Toolbar;->getHorizontalMargins(Landroid/view/View;)I
HSPLandroidx/appcompat/widget/Toolbar;->getNavigationContentDescription()Ljava/lang/CharSequence;
HSPLandroidx/appcompat/widget/Toolbar;->getNavigationIcon()Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/Toolbar;->getSubtitle()Ljava/lang/CharSequence;
HSPLandroidx/appcompat/widget/Toolbar;->getTitle()Ljava/lang/CharSequence;
HSPLandroidx/appcompat/widget/Toolbar;->getVerticalMargins(Landroid/view/View;)I
HSPLandroidx/appcompat/widget/Toolbar;->getViewListMeasuredWidth(Ljava/util/List;[I)I
HSPLandroidx/appcompat/widget/Toolbar;->getWrapper()Landroidx/appcompat/widget/DecorToolbar;
HSPLandroidx/appcompat/widget/Toolbar;->isChildOrHidden(Landroid/view/View;)Z
HSPLandroidx/appcompat/widget/Toolbar;->layoutChildRight(Landroid/view/View;I[II)I
HSPLandroidx/appcompat/widget/Toolbar;->measureChildCollapseMargins(Landroid/view/View;IIII[I)I
HSPLandroidx/appcompat/widget/Toolbar;->measureChildConstrained(Landroid/view/View;IIIII)V
HSPLandroidx/appcompat/widget/Toolbar;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/Toolbar;->onMeasure(II)V
HSPLandroidx/appcompat/widget/Toolbar;->onRtlPropertiesChanged(I)V
HSPLandroidx/appcompat/widget/Toolbar;->setCollapsible(Z)V
HSPLandroidx/appcompat/widget/Toolbar;->setContentInsetsRelative(II)V
HSPLandroidx/appcompat/widget/Toolbar;->setMenu(Landroidx/appcompat/view/menu/MenuBuilder;Landroidx/appcompat/widget/ActionMenuPresenter;)V
HSPLandroidx/appcompat/widget/Toolbar;->setNavigationContentDescription(Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/Toolbar;->setNavigationOnClickListener(Landroid/view/View$OnClickListener;)V
HSPLandroidx/appcompat/widget/Toolbar;->setPopupTheme(I)V
HSPLandroidx/appcompat/widget/Toolbar;->setSubtitle(Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/widget/Toolbar;->setSubtitleTextAppearance(Landroid/content/Context;I)V
HSPLandroidx/appcompat/widget/Toolbar;->setTitle(Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/widget/Toolbar;->setTitleTextAppearance(Landroid/content/Context;I)V
HSPLandroidx/appcompat/widget/Toolbar;->shouldCollapse()Z
HSPLandroidx/appcompat/widget/Toolbar;->shouldLayout(Landroid/view/View;)Z
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper$1;-><init>(Landroidx/appcompat/widget/ToolbarWidgetWrapper;)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;-><init>(Landroidx/appcompat/widget/Toolbar;Z)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;-><init>(Landroidx/appcompat/widget/Toolbar;ZII)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->getContext()Landroid/content/Context;
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->getDisplayOptions()I
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->getNavigationMode()I
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setCollapsible(Z)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setDefaultNavigationContentDescription(I)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setDisplayOptions(I)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setEmbeddedTabView(Landroidx/appcompat/widget/ScrollingTabContainerView;)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setHomeButtonEnabled(Z)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setMenu(Landroid/view/Menu;Landroidx/appcompat/view/menu/MenuPresenter$Callback;)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setMenuPrepared()V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setTitleInt(Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setWindowCallback(Landroid/view/Window$Callback;)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->setWindowTitle(Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/widget/ToolbarWidgetWrapper;->updateNavigationIcon()V
HSPLandroidx/appcompat/widget/TooltipCompat;->setTooltipText(Landroid/view/View;Ljava/lang/CharSequence;)V
HSPLandroidx/appcompat/widget/VectorEnabledTintResources;-><clinit>()V
HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->isCompatVectorFromResourcesEnabled()Z
HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->shouldBeUsed()Z
HSPLandroidx/appcompat/widget/ViewUtils;-><clinit>()V
HSPLandroidx/appcompat/widget/ViewUtils;->isLayoutRtl(Landroid/view/View;)Z
HSPLandroidx/appcompat/widget/ViewUtils;->makeOptionalFitsSystemWindows(Landroid/view/View;)V
Landroidx/appcompat/R$attr;
Landroidx/appcompat/R$bool;
Landroidx/appcompat/R$drawable;
Landroidx/appcompat/R$id;
Landroidx/appcompat/R$layout;
Landroidx/appcompat/R$string;
Landroidx/appcompat/R$style;
Landroidx/appcompat/R$styleable;
Landroidx/appcompat/app/ActionBar$LayoutParams;
Landroidx/appcompat/app/ActionBar;
Landroidx/appcompat/app/ActionBarDrawerToggle$DelegateProvider;
Landroidx/appcompat/app/AppCompatActivity$1;
Landroidx/appcompat/app/AppCompatActivity$2;
Landroidx/appcompat/app/AppCompatActivity;
Landroidx/appcompat/app/AppCompatCallback;
Landroidx/appcompat/app/AppCompatDelegate;
Landroidx/appcompat/app/AppCompatDelegateImpl$2;
Landroidx/appcompat/app/AppCompatDelegateImpl$3;
Landroidx/appcompat/app/AppCompatDelegateImpl$5;
Landroidx/appcompat/app/AppCompatDelegateImpl$ActionMenuPresenterCallback;
Landroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl;
Landroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;
Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;
Landroidx/appcompat/app/AppCompatDelegateImpl;
Landroidx/appcompat/app/AppCompatViewInflater;
Landroidx/appcompat/app/ToolbarActionBar;
Landroidx/appcompat/app/WindowDecorActionBar$1;
Landroidx/appcompat/app/WindowDecorActionBar$2;
Landroidx/appcompat/app/WindowDecorActionBar$3;
Landroidx/appcompat/app/WindowDecorActionBar;
Landroidx/appcompat/content/res/AppCompatResources;
Landroidx/appcompat/graphics/drawable/DrawableWrapper;
Landroidx/appcompat/resources/R$drawable;
Landroidx/appcompat/view/ActionBarPolicy;
Landroidx/appcompat/view/ContextThemeWrapper;
Landroidx/appcompat/view/SupportMenuInflater;
Landroidx/appcompat/view/WindowCallbackWrapper;
Landroidx/appcompat/view/menu/ActionMenuItem;
Landroidx/appcompat/view/menu/BaseMenuPresenter;
Landroidx/appcompat/view/menu/MenuBuilder$Callback;
Landroidx/appcompat/view/menu/MenuBuilder$ItemInvoker;
Landroidx/appcompat/view/menu/MenuBuilder;
Landroidx/appcompat/view/menu/MenuPresenter$Callback;
Landroidx/appcompat/view/menu/MenuPresenter;
Landroidx/appcompat/view/menu/MenuView;
Landroidx/appcompat/widget/AbsActionBarView$VisibilityAnimListener;
Landroidx/appcompat/widget/AbsActionBarView;
Landroidx/appcompat/widget/ActionBarBackgroundDrawable;
Landroidx/appcompat/widget/ActionBarContainer;
Landroidx/appcompat/widget/ActionBarContextView;
Landroidx/appcompat/widget/ActionBarOverlayLayout$1;
Landroidx/appcompat/widget/ActionBarOverlayLayout$2;
Landroidx/appcompat/widget/ActionBarOverlayLayout$3;
Landroidx/appcompat/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;
Landroidx/appcompat/widget/ActionBarOverlayLayout$LayoutParams;
Landroidx/appcompat/widget/ActionBarOverlayLayout;
Landroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton$1;
Landroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton;
Landroidx/appcompat/widget/ActionMenuPresenter$PopupPresenterCallback;
Landroidx/appcompat/widget/ActionMenuPresenter;
Landroidx/appcompat/widget/ActionMenuView$ActionMenuChildView;
Landroidx/appcompat/widget/ActionMenuView$OnMenuItemClickListener;
Landroidx/appcompat/widget/ActionMenuView;
Landroidx/appcompat/widget/AppCompatBackgroundHelper;
Landroidx/appcompat/widget/AppCompatButton;
Landroidx/appcompat/widget/AppCompatDrawableManager$1;
Landroidx/appcompat/widget/AppCompatDrawableManager;
Landroidx/appcompat/widget/AppCompatEditText;
Landroidx/appcompat/widget/AppCompatEmojiEditTextHelper;
Landroidx/appcompat/widget/AppCompatEmojiTextHelper;
Landroidx/appcompat/widget/AppCompatImageButton;
Landroidx/appcompat/widget/AppCompatImageHelper;
Landroidx/appcompat/widget/AppCompatImageView;
Landroidx/appcompat/widget/AppCompatTextClassifierHelper;
Landroidx/appcompat/widget/AppCompatTextHelper$1;
Landroidx/appcompat/widget/AppCompatTextHelper;
Landroidx/appcompat/widget/AppCompatTextView;
Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl23;
Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl29;
Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl;
Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;
Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;
Landroidx/appcompat/widget/ContentFrameLayout;
Landroidx/appcompat/widget/DecorContentParent;
Landroidx/appcompat/widget/DecorToolbar;
Landroidx/appcompat/widget/DrawableUtils;
Landroidx/appcompat/widget/EmojiCompatConfigurationView;
Landroidx/appcompat/widget/ForwardingListener;
Landroidx/appcompat/widget/LinearLayoutCompat;
Landroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;
Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;
Landroidx/appcompat/widget/ResourceManagerInternal;
Landroidx/appcompat/widget/ResourcesWrapper;
Landroidx/appcompat/widget/RtlSpacingHelper;
Landroidx/appcompat/widget/ThemeUtils;
Landroidx/appcompat/widget/TintContextWrapper;
Landroidx/appcompat/widget/TintResources;
Landroidx/appcompat/widget/TintTypedArray;
Landroidx/appcompat/widget/Toolbar$$ExternalSyntheticLambda0;
Landroidx/appcompat/widget/Toolbar$1;
Landroidx/appcompat/widget/Toolbar$2;
Landroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;
Landroidx/appcompat/widget/Toolbar$LayoutParams;
Landroidx/appcompat/widget/Toolbar;
Landroidx/appcompat/widget/ToolbarWidgetWrapper$1;
Landroidx/appcompat/widget/ToolbarWidgetWrapper;
Landroidx/appcompat/widget/TooltipCompat;
Landroidx/appcompat/widget/VectorEnabledTintResources;
Landroidx/appcompat/widget/ViewUtils;
PLandroidx/appcompat/app/ActionBar;->onDestroy()V
PLandroidx/appcompat/app/AppCompatActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
PLandroidx/appcompat/app/AppCompatActivity;->getSupportActionBar()Landroidx/appcompat/app/ActionBar;
PLandroidx/appcompat/app/AppCompatActivity;->onDestroy()V
PLandroidx/appcompat/app/AppCompatActivity;->onKeyDown(ILandroid/view/KeyEvent;)Z
PLandroidx/appcompat/app/AppCompatActivity;->onStop()V
PLandroidx/appcompat/app/AppCompatActivity;->performMenuItemShortcut(Landroid/view/KeyEvent;)Z
PLandroidx/appcompat/app/AppCompatDelegate;->removeActivityDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V
PLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onDetachedFromWindow()V
PLandroidx/appcompat/app/AppCompatDelegateImpl$ActionMenuPresenterCallback;->onCloseMenu(Landroidx/appcompat/view/menu/MenuBuilder;Z)V
PLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
PLandroidx/appcompat/app/AppCompatDelegateImpl;->checkCloseActionMenu(Landroidx/appcompat/view/menu/MenuBuilder;)V
PLandroidx/appcompat/app/AppCompatDelegateImpl;->cleanupAutoManagers()V
PLandroidx/appcompat/app/AppCompatDelegateImpl;->dismissPopups()V
PLandroidx/appcompat/app/AppCompatDelegateImpl;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
PLandroidx/appcompat/app/AppCompatDelegateImpl;->endOnGoingFadeAnimation()V
PLandroidx/appcompat/app/AppCompatDelegateImpl;->onBackPressed()Z
PLandroidx/appcompat/app/AppCompatDelegateImpl;->onDestroy()V
PLandroidx/appcompat/app/AppCompatDelegateImpl;->onKeyDown(ILandroid/view/KeyEvent;)Z
PLandroidx/appcompat/app/AppCompatDelegateImpl;->onKeyUp(ILandroid/view/KeyEvent;)Z
PLandroidx/appcompat/app/AppCompatDelegateImpl;->onStop()V
PLandroidx/appcompat/app/WindowDecorActionBar;->collapseActionView()Z
PLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
PLandroidx/appcompat/view/WindowCallbackWrapper;->onDetachedFromWindow()V
PLandroidx/appcompat/view/menu/BaseMenuPresenter;->onCloseMenu(Landroidx/appcompat/view/menu/MenuBuilder;Z)V
PLandroidx/appcompat/view/menu/MenuBuilder;->close()V
PLandroidx/appcompat/view/menu/MenuBuilder;->close(Z)V
PLandroidx/appcompat/widget/ActionBarContainer;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
PLandroidx/appcompat/widget/ActionBarContextView;->onDetachedFromWindow()V
PLandroidx/appcompat/widget/ActionBarOverlayLayout;->dismissPopups()V
PLandroidx/appcompat/widget/ActionBarOverlayLayout;->haltActionBarHideOffsetAnimations()V
PLandroidx/appcompat/widget/ActionBarOverlayLayout;->onDetachedFromWindow()V
PLandroidx/appcompat/widget/ActionMenuPresenter;->dismissPopupMenus()Z
PLandroidx/appcompat/widget/ActionMenuPresenter;->hideOverflowMenu()Z
PLandroidx/appcompat/widget/ActionMenuPresenter;->hideSubMenus()Z
PLandroidx/appcompat/widget/ActionMenuPresenter;->onCloseMenu(Landroidx/appcompat/view/menu/MenuBuilder;Z)V
PLandroidx/appcompat/widget/ActionMenuView;->dismissPopupMenus()V
PLandroidx/appcompat/widget/ActionMenuView;->onDetachedFromWindow()V
PLandroidx/appcompat/widget/ContentFrameLayout;->onDetachedFromWindow()V
PLandroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;->onCloseMenu(Landroidx/appcompat/view/menu/MenuBuilder;Z)V
PLandroidx/appcompat/widget/Toolbar;->dismissPopupMenus()V
PLandroidx/appcompat/widget/Toolbar;->hasExpandedActionView()Z
PLandroidx/appcompat/widget/Toolbar;->onDetachedFromWindow()V
PLandroidx/appcompat/widget/ToolbarWidgetWrapper;->dismissPopupMenus()V
PLandroidx/appcompat/widget/ToolbarWidgetWrapper;->hasExpandedActionView()Z
# Baseline profiles for androidx.activity
HSPLandroidx/activity/ComponentActivity$1;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$2;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$6;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$7;-><init>(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$7;->onContextAvailable(Landroid/content/Context;)V
HSPLandroidx/activity/ComponentActivity;-><init>()V
HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;
HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;
HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;
HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
HSPLandroidx/activity/OnBackPressedCallback;-><init>(Z)V
HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V
HSPLandroidx/activity/OnBackPressedCallback;->remove()V
HSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V
HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Ljava/lang/Runnable;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;
HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V
HSPLandroidx/activity/result/ActivityResultLauncher;-><init>()V
HSPLandroidx/activity/result/ActivityResultRegistry$3;-><init>(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;ILandroidx/activity/result/contract/ActivityResultContract;)V
HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;-><init>(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
HSPLandroidx/activity/result/ActivityResultRegistry;-><init>()V
HSPLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V
HSPLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I
HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)I
HSPLandroidx/activity/result/contract/ActivityResultContract;-><init>()V
HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;-><init>()V
HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;-><init>()V
Landroidx/activity/Cancellable;
Landroidx/activity/ComponentActivity$1;
Landroidx/activity/ComponentActivity$2;
Landroidx/activity/ComponentActivity$3;
Landroidx/activity/ComponentActivity$4;
Landroidx/activity/ComponentActivity$5;
Landroidx/activity/ComponentActivity$6;
Landroidx/activity/ComponentActivity$7;
Landroidx/activity/ComponentActivity$NonConfigurationInstances;
Landroidx/activity/ComponentActivity;
Landroidx/activity/OnBackPressedCallback;
Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;
Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;
Landroidx/activity/OnBackPressedDispatcher;
Landroidx/activity/OnBackPressedDispatcherOwner;
Landroidx/activity/contextaware/ContextAware;
Landroidx/activity/contextaware/ContextAwareHelper;
Landroidx/activity/contextaware/OnContextAvailableListener;
Landroidx/activity/result/ActivityResult;
Landroidx/activity/result/ActivityResultCallback;
Landroidx/activity/result/ActivityResultCaller;
Landroidx/activity/result/ActivityResultLauncher;
Landroidx/activity/result/ActivityResultRegistry$3;
Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract;
Landroidx/activity/result/ActivityResultRegistry;
Landroidx/activity/result/ActivityResultRegistryOwner;
Landroidx/activity/result/contract/ActivityResultContract;
Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;
Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;
PLandroidx/activity/ComponentActivity$1;->run()V
PLandroidx/activity/ComponentActivity;->access$001(Landroidx/activity/ComponentActivity;)V
PLandroidx/activity/ComponentActivity;->onBackPressed()V
PLandroidx/activity/OnBackPressedCallback;->isEnabled()Z
PLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V
PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V
PLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V
PLandroidx/activity/OnBackPressedDispatcher;->onBackPressed()V
PLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V
PLandroidx/activity/result/ActivityResultRegistry$3;->unregister()V
PLandroidx/activity/result/ActivityResultRegistry;->unregister(Ljava/lang/String;)V
# Baseline profiles for lifecycle-livedata
HSPLandroidx/lifecycle/MediatorLiveData$Source;-><init>(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/MediatorLiveData$Source;->onChanged(Ljava/lang/Object;)V
HSPLandroidx/lifecycle/MediatorLiveData$Source;->plug()V
HSPLandroidx/lifecycle/MediatorLiveData$Source;->unplug()V
HSPLandroidx/lifecycle/MediatorLiveData;-><init>()V
HSPLandroidx/lifecycle/MediatorLiveData;->addSource(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/MediatorLiveData;->onActive()V
HSPLandroidx/lifecycle/MediatorLiveData;->onInactive()V
HSPLandroidx/lifecycle/MediatorLiveData;->removeSource(Landroidx/lifecycle/LiveData;)V
HSPLandroidx/lifecycle/Transformations$1;-><init>(Landroidx/lifecycle/MediatorLiveData;Landroidx/arch/core/util/Function;)V
HSPLandroidx/lifecycle/Transformations$1;->onChanged(Ljava/lang/Object;)V
HSPLandroidx/lifecycle/Transformations$2$1;-><init>(Landroidx/lifecycle/Transformations$2;)V
HSPLandroidx/lifecycle/Transformations$2$1;->onChanged(Ljava/lang/Object;)V
HSPLandroidx/lifecycle/Transformations$2;-><init>(Landroidx/arch/core/util/Function;Landroidx/lifecycle/MediatorLiveData;)V
HSPLandroidx/lifecycle/Transformations$2;->onChanged(Ljava/lang/Object;)V
HSPLandroidx/lifecycle/Transformations;->map(Landroidx/lifecycle/LiveData;Landroidx/arch/core/util/Function;)Landroidx/lifecycle/LiveData;
HSPLandroidx/lifecycle/Transformations;->switchMap(Landroidx/lifecycle/LiveData;Landroidx/arch/core/util/Function;)Landroidx/lifecycle/LiveData;
Landroidx/lifecycle/MediatorLiveData$Source;
Landroidx/lifecycle/MediatorLiveData;
Landroidx/lifecycle/Transformations$1;
Landroidx/lifecycle/Transformations$2$1;
Landroidx/lifecycle/Transformations$2;
Landroidx/lifecycle/Transformations;
# Baseline profiles for lifecycle-process
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;-><init>()V
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
HSPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Landroidx/lifecycle/LifecycleOwner;
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
HSPLandroidx/lifecycle/ProcessLifecycleOwner$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$2;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner$3;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostStarted(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted()V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->attach(Landroid/content/Context;)V
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->get()Landroidx/lifecycle/LifecycleOwner;
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle;
HSPLandroidx/lifecycle/ProcessLifecycleOwner;->init(Landroid/content/Context;)V
PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityStopped(Landroid/app/Activity;)V
PLandroidx/lifecycle/ProcessLifecycleOwner$1;->run()V
PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPaused(Landroid/app/Activity;)V
PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityStopped(Landroid/app/Activity;)V
PLandroidx/lifecycle/ProcessLifecycleOwner;->activityPaused()V
PLandroidx/lifecycle/ProcessLifecycleOwner;->activityStopped()V
PLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchPauseIfNeeded()V
PLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchStopIfNeeded()V
# Baseline profiles for lifecycle-livedata-core
HSPLandroidx/lifecycle/LiveData$1;-><init>(Landroidx/lifecycle/LiveData;)V
HSPLandroidx/lifecycle/LiveData$1;->run()V
HSPLandroidx/lifecycle/LiveData$AlwaysActiveObserver;-><init>(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/LiveData$AlwaysActiveObserver;->shouldBeActive()Z
HSPLandroidx/lifecycle/LiveData$LifecycleBoundObserver;-><init>(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->shouldBeActive()Z
HSPLandroidx/lifecycle/LiveData$ObserverWrapper;-><init>(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/LiveData$ObserverWrapper;->activeStateChanged(Z)V
HSPLandroidx/lifecycle/LiveData$ObserverWrapper;->detachObserver()V
HSPLandroidx/lifecycle/LiveData;-><clinit>()V
HSPLandroidx/lifecycle/LiveData;-><init>()V
HSPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V
HSPLandroidx/lifecycle/LiveData;->changeActiveCounter(I)V
HSPLandroidx/lifecycle/LiveData;->considerNotify(Landroidx/lifecycle/LiveData$ObserverWrapper;)V
HSPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V
HSPLandroidx/lifecycle/LiveData;->getValue()Ljava/lang/Object;
HSPLandroidx/lifecycle/LiveData;->getVersion()I
HSPLandroidx/lifecycle/LiveData;->hasActiveObservers()Z
HSPLandroidx/lifecycle/LiveData;->observe(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/LiveData;->observeForever(Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/LiveData;->onActive()V
HSPLandroidx/lifecycle/LiveData;->onInactive()V
HSPLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V
HSPLandroidx/lifecycle/LiveData;->removeObserver(Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V
HSPLandroidx/lifecycle/MediatorLiveData$Source;-><init>(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/MediatorLiveData$Source;->onChanged(Ljava/lang/Object;)V
HSPLandroidx/lifecycle/MediatorLiveData$Source;->plug()V
HSPLandroidx/lifecycle/MediatorLiveData$Source;->unplug()V
HSPLandroidx/lifecycle/MediatorLiveData;-><init>()V
HSPLandroidx/lifecycle/MediatorLiveData;->addSource(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V
HSPLandroidx/lifecycle/MediatorLiveData;->onActive()V
HSPLandroidx/lifecycle/MediatorLiveData;->onInactive()V
HSPLandroidx/lifecycle/MediatorLiveData;->removeSource(Landroidx/lifecycle/LiveData;)V
HSPLandroidx/lifecycle/MutableLiveData;-><init>()V
HSPLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V
PLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->detachObserver()V
# Baseline profiles for Lifecycle ViewModel
HSPLandroidx/lifecycle/ViewModel;-><init>()V
HSPLandroidx/lifecycle/ViewModelLazy;-><init>(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/lifecycle/ViewModelLazy;->getValue()Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelLazy;->getValue()Ljava/lang/Object;
HSPLandroidx/lifecycle/ViewModelProvider;-><init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V
HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/String;Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
HSPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V
PLandroidx/lifecycle/ViewModel;->clear()V
PLandroidx/lifecycle/ViewModel;->onCleared()V
PLandroidx/lifecycle/ViewModelStore;->clear()V
# Baseline Profile rules for lifecycle-runtime
HPLandroidx/lifecycle/LifecycleRegistry;->backwardPass(Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;Z)V
HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;
HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->forwardPass(Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State;
HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->isSynced()Z
HSPLandroidx/lifecycle/LifecycleRegistry;->min(Landroidx/lifecycle/Lifecycle$State;Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$State;
HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->popParentState()V
HSPLandroidx/lifecycle/LifecycleRegistry;->pushParentState(Landroidx/lifecycle/Lifecycle$State;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->setCurrentState(Landroidx/lifecycle/Lifecycle$State;)V
HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->registerIn(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment;-><init>()V
HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/lifecycle/ReportFragment;->dispatchCreate(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V
HSPLandroidx/lifecycle/ReportFragment;->dispatchResume(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V
HSPLandroidx/lifecycle/ReportFragment;->dispatchStart(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V
HSPLandroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V
HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
HSPLandroidx/lifecycle/ReportFragment;->onResume()V
HSPLandroidx/lifecycle/ReportFragment;->onStart()V
HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V
HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V
PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
PLandroidx/lifecycle/ReportFragment;->onDestroy()V
PLandroidx/lifecycle/ReportFragment;->onPause()V
PLandroidx/lifecycle/ReportFragment;->onStop()V
# Baseline Profile Rules for androidx.startup
Landroidx/startup/AppInitializer;
HSPLandroidx/startup/AppInitializer;->**(**)**

@ -1,10 +0,0 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "net.micode.notes",
"variantName": "debug",
"elements": []
}

@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "net.micode.notes",
"variantName": "release",
"elements": []
}

@ -0,0 +1 @@
{"options":{"minApiLevel":"32","isDebugModeEnabled":false},"version":"8.13.6"}

@ -0,0 +1,89 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# Starting with version 2.2 of the Android plugin for Gradle, this file is distributed together with
# the plugin and unpacked at build-time. The files in $ANDROID_HOME are no longer maintained and
# will be ignored by new version of the Android plugin for Gradle.
# Optimizations: If you don't want to optimize, use the proguard-android.txt configuration file
# instead of this one, which turns off the optimization flags.
-allowaccessmodification
# Preserve some attributes that may be required for reflection.
-keepattributes AnnotationDefault,
EnclosingMethod,
InnerClasses,
RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations,
Signature
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService
# For native methods, see https://www.guardsquare.com/manual/configuration/examples#native
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# Keep setters in Views so that animations can still work.
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see https://www.guardsquare.com/manual/configuration/examples#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final ** CREATOR;
}
# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**
# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**

@ -0,0 +1,95 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# Starting with version 2.2 of the Android plugin for Gradle, this file is distributed together with
# the plugin and unpacked at build-time. The files in $ANDROID_HOME are no longer maintained and
# will be ignored by new version of the Android plugin for Gradle.
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize steps (and performs some
# of these optimizations on its own).
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.
-dontoptimize
# Preserve some attributes that may be required for reflection.
-keepattributes AnnotationDefault,
EnclosingMethod,
InnerClasses,
RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations,
Signature
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService
# For native methods, see https://www.guardsquare.com/manual/configuration/examples#native
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# Keep setters in Views so that animations can still work.
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see https://www.guardsquare.com/manual/configuration/examples#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final ** CREATOR;
}
# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**
# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**

@ -0,0 +1,89 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# Starting with version 2.2 of the Android plugin for Gradle, this file is distributed together with
# the plugin and unpacked at build-time. The files in $ANDROID_HOME are no longer maintained and
# will be ignored by new version of the Android plugin for Gradle.
# Optimizations can be turned on and off in the 'postProcessing' DSL block.
# The configuration below is applied if optimizations are enabled.
-allowaccessmodification
# Preserve some attributes that may be required for reflection.
-keepattributes AnnotationDefault,
EnclosingMethod,
InnerClasses,
RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations,
Signature
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService
# For native methods, see https://www.guardsquare.com/manual/configuration/examples#native
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# Keep setters in Views so that animations can still work.
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see https://www.guardsquare.com/manual/configuration/examples#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final ** CREATOR;
}
# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**
# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save