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