diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b5e50fa..6a69a66 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,9 +39,6 @@ - () val sourceUrl = NeoPreference.loadString(R.string.key_package_source, NeoTermPath.DEFAULT_SOURCE) val packageFilePrefix = detectSourceFilePrefix(sourceUrl) - File(NeoTermPath.PACKAGE_LIST_DIR).listFiles().filterTo(sourceFiles) { it.name.startsWith(packageFilePrefix) } + if (packageFilePrefix.isNotEmpty()) { + File(NeoTermPath.PACKAGE_LIST_DIR) + .listFiles() + .filterTo(sourceFiles) { it.name.startsWith(packageFilePrefix) } + } return sourceFiles } private fun detectSourceFilePrefix(sourceUrl: String): String { - val url = URL(sourceUrl) - val builder = StringBuilder() - builder.append(url.host) - builder.append("_") - if (url.path.isNotEmpty()) { - builder.append(url.path.substring(1)) // Skip '/' + try { + val url = URL(sourceUrl) + val builder = StringBuilder() + builder.append(url.host) + if (url.path != null && url.path.isNotEmpty()) { + builder.append("_") + builder.append(url.path.substring(1)) // Skip '/' + } + builder.append("_dists_stable_main_binary-") + return builder.toString() + } catch (e: Exception) { + return "" } - builder.append("_dists_stable_main_binary-") - return builder.toString() } override fun onCreateOptionsMenu(menu: Menu?): Boolean { @@ -118,29 +128,72 @@ class PackageManagerActivity : AppCompatActivity(), SearchView.OnQueryTextListen when (item?.itemId) { android.R.id.home -> finish() R.id.action_source -> changeSource() + R.id.action_update_and_refresh -> executeAptUpdate() + R.id.action_refresh -> refreshPackageList() } return super.onOptionsItemSelected(item) } private fun changeSource() { + val sourceList = resources.getStringArray(R.array.pref_package_source_values) + val currentSource = NeoPreference.loadString(R.string.key_package_source, NeoTermPath.DEFAULT_SOURCE) + var checkedItem = sourceList.indexOf(currentSource) + if (checkedItem == -1) { + checkedItem = sourceList.size - 1 + } + + @SuppressLint("ShowToast") + var toast = Toast.makeText(this, "", Toast.LENGTH_SHORT) + var selectedIndex = 0 + + AlertDialog.Builder(this) + .setTitle(R.string.pref_package_source) + .setSingleChoiceItems(R.array.pref_package_source_entries, checkedItem, { dialog, which -> + if (which == sourceList.size - 1) { + changeSourceToUserInput() + dialog.dismiss() + } else { + selectedIndex = which + toast.cancel() + toast = Toast.makeText(this@PackageManagerActivity, sourceList[which], Toast.LENGTH_SHORT) + toast.show() + } + }) + .setPositiveButton(android.R.string.yes, { _, _ -> + if (selectedIndex != sourceList.size - 1) { + changeSourceInternal(sourceList[selectedIndex]) + } + }) + .setNegativeButton(android.R.string.no, null) + .show() + } + + private fun changeSourceToUserInput() { val editText = EditText(this) - editText.setText(NeoPreference.loadString(R.string.key_package_source, NeoTermPath.DEFAULT_SOURCE)) + val currentSource = NeoPreference.loadString(R.string.key_package_source, NeoTermPath.DEFAULT_SOURCE) + editText.setText(currentSource) + editText.requestFocus() + editText.setSelection(0, currentSource.length) AlertDialog.Builder(this) .setTitle(R.string.pref_package_source) .setView(editText) .setNegativeButton(android.R.string.no, null) .setPositiveButton(android.R.string.yes, { _, _ -> val source = editText.text.toString() - NeoPreference.store(R.string.key_package_source, source) - - val sourceFile = File(NeoTermPath.SOURCE_FILE) - FileUtils.writeFile(sourceFile, generateSourceFile(source).toByteArray()) - postChangeSource() + changeSourceInternal(source) }) .show() } - private fun postChangeSource() { + private fun changeSourceInternal(source: String) { + NeoPreference.store(R.string.key_package_source, source) + + val sourceFile = File(NeoTermPath.SOURCE_FILE) + FileUtils.writeFile(sourceFile, generateSourceFile(source).toByteArray()) + executeAptUpdate() + } + + private fun executeAptUpdate() { val dialog = TerminalDialog(this@PackageManagerActivity, DialogInterface.OnCancelListener { refreshPackageList() }) @@ -171,6 +224,10 @@ class PackageManagerActivity : AppCompatActivity(), SearchView.OnQueryTextListen adapter.edit() .replaceAll(models) .commit() + if (models.isEmpty()) { + Toast.makeText(this@PackageManagerActivity, R.string.package_list_empty, Toast.LENGTH_SHORT).show() + changeSource() + } } }.start() } diff --git a/app/src/main/java/io/neoterm/ui/settings/PackageSettingsActivity.kt b/app/src/main/java/io/neoterm/ui/settings/PackageSettingsActivity.kt deleted file mode 100644 index bf0b989..0000000 --- a/app/src/main/java/io/neoterm/ui/settings/PackageSettingsActivity.kt +++ /dev/null @@ -1,62 +0,0 @@ -package io.neoterm.ui.settings - -import android.os.Bundle -import android.support.v7.app.AlertDialog -import android.support.v7.app.AppCompatPreferenceActivity -import android.view.MenuItem -import io.neoterm.R -import io.neoterm.customize.NeoTermPath -import io.neoterm.preference.NeoPreference -import io.neoterm.utils.FileUtils -import java.io.File - -/** - * @author kiva - */ -class PackageSettingsActivity : AppCompatPreferenceActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - supportActionBar.title = getString(R.string.package_settings) - supportActionBar.setDisplayHomeAsUpEnabled(true) - addPreferencesFromResource(R.xml.settings_package) - - val preference = findPreference(getString(R.string.key_package_source)) - preference.summary = NeoPreference.loadString(R.string.key_package_source, NeoTermPath.DEFAULT_SOURCE) - - preference.setOnPreferenceChangeListener { preference, newValue -> - val newSource = newValue as String - preference.summary = newSource - if (newSource.isNotEmpty()) { - val sourceFile = File(NeoTermPath.SOURCE_FILE) - FileUtils.writeFile(sourceFile, generateSourceFile(newSource).toByteArray()) - - AlertDialog.Builder(this@PackageSettingsActivity) - .setMessage(R.string.source_changed) - .setPositiveButton(android.R.string.yes, null) - .show() - } - return@setOnPreferenceChangeListener true - } - } - - private fun generateSourceFile(source: String): String { - return StringBuilder().append("# Generated by NeoTerm-Preference\n") - .append("deb ") - .append(source) - .append(" stable main") - .append("\n") - .toString() - } - - override fun onBuildHeaders(target: MutableList
?) { - } - - override fun onOptionsItemSelected(item: MenuItem?): Boolean { - when (item?.itemId) { - android.R.id.home -> - finish() - } - return super.onOptionsItemSelected(item) - } -} \ No newline at end of file diff --git a/app/src/main/java/io/neoterm/view/tab/TermTabDecorator.kt b/app/src/main/java/io/neoterm/view/tab/TermTabDecorator.kt index a2cd59b..bcbdebe 100644 --- a/app/src/main/java/io/neoterm/view/tab/TermTabDecorator.kt +++ b/app/src/main/java/io/neoterm/view/tab/TermTabDecorator.kt @@ -12,6 +12,7 @@ import de.mrapp.android.tabswitcher.Tab import de.mrapp.android.tabswitcher.TabSwitcher import de.mrapp.android.tabswitcher.TabSwitcherDecorator import io.neoterm.R +import io.neoterm.customize.font.FontManager import io.neoterm.preference.NeoPreference import io.neoterm.ui.NeoTermActivity import io.neoterm.view.ExtraKeysView @@ -69,7 +70,7 @@ class TermTabDecorator(val context: NeoTermActivity) : TabSwitcherDecorator() { return } view.textSize = NeoPreference.loadInt(NeoPreference.KEY_FONT_SIZE, 30) - view.setTypeface(Typeface.MONOSPACE) + view.setTypeface(FontManager.getCurrentFont()) context.fullScreenToggleButton.setStatus(NeoPreference.loadBoolean(R.string.key_ui_fullscreen, false)) if (tab is TermTab) { diff --git a/app/src/main/res/menu/menu_pm.xml b/app/src/main/res/menu/menu_pm.xml index ff8129c..1c3eafe 100644 --- a/app/src/main/res/menu/menu_pm.xml +++ b/app/src/main/res/menu/menu_pm.xml @@ -9,6 +9,16 @@ app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="ifRoom|collapseActionView" /> + + + + 重试 APT 源已更改,你可能需要执行 apt update 来更新 软件包: %s\n版本: %s\n依赖: %s\n占用空间: %s\n描述: %s\n主页: %s + 软件包列表为空,请检查你的软件源 + 刷新 + 更新 & 刷新 只使用 NeoTerm @@ -51,4 +54,10 @@ 完成 安装 + + + 默认源 (稳定,推荐) + 调试源 (可能不稳定) + 输入… + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f9b9576..3a44193 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,9 @@ Done Install Package: %s\nVersion: %s\nDepends: %s\nInstalled Size: %s\nDescription: %s\nHome Page: %s + Package list is empty, please check out your source. + Refresh + Update & Refresh Default @@ -73,4 +76,16 @@ System First + + Default Source (stable, recommended) + Debug Source (maybe unstable) + Input… + + + + https://mirrors.geekpie.org/neoterm + http://192.243.117.135 + User-Input + + diff --git a/app/src/main/res/xml/settings_package.xml b/app/src/main/res/xml/settings_package.xml deleted file mode 100644 index 8e1105d..0000000 --- a/app/src/main/res/xml/settings_package.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file