make uihelper a stacked trait

precision_debug
Georg Lukas 2011-05-26 12:31:48 +02:00
rodzic a4d8c0f898
commit 919d7f672d
7 zmienionych plików z 69 dodań i 92 usunięć

Wyświetl plik

@ -35,7 +35,7 @@ class HubActivity extends MainListActivity("hub", R.id.hub) {
//super.onListItemClick(l, v, position, id)
val c = getListView().getItemAtPosition(position).asInstanceOf[Cursor]
val call = c.getString(StorageDatabase.Position.COLUMN_CALL)
uihelper.openDetails(call)
openDetails(call)
}
}

Wyświetl plik

@ -4,7 +4,8 @@ import _root_.android.app.ListActivity
import _root_.android.os.Bundle
import _root_.android.view.Window
class LoadingListActivity extends ListActivity with LoadingIndicator {
class LoadingListActivity extends ListActivity
with UIHelper {
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)

Wyświetl plik

@ -70,7 +70,7 @@ class LogActivity extends MainListActivity("log", R.id.log) {
return
val call = c.getString(COLUMN_MESSAGE).split(">")(0)
Log.d(TAG, "onListItemClick: %s".format(call))
uihelper.openDetails(call)
openDetails(call)
}
def load_cursor(i : Intent) = {

Wyświetl plik

@ -5,9 +5,9 @@ import _root_.android.view.View.OnClickListener
import _root_.android.view.{ContextMenu, Menu, MenuItem, View, Window}
import _root_.android.widget.Button
class MainListActivity(actname : String, menuid : Int) extends LoadingListActivity with OnClickListener {
lazy val prefs = new PrefsWrapper(this)
lazy val uihelper = new UIHelper(this, menuid, prefs)
class MainListActivity(actname : String, menuid : Int) extends LoadingListActivity
with OnClickListener {
menu_id = menuid
lazy val singleBtn = findViewById(R.id.singlebtn).asInstanceOf[Button]
lazy val startstopBtn = findViewById(R.id.startstopbtn).asInstanceOf[Button]
@ -20,21 +20,16 @@ class MainListActivity(actname : String, menuid : Int) extends LoadingListActivi
override def onResume() {
super.onResume()
if (!uihelper.checkConfig())
if (!checkConfig())
return
setupButtons(AprsService.running)
uihelper.makeLaunchActivity(actname)
makeLaunchActivity(actname)
}
override def onCreateOptionsMenu(menu : Menu) : Boolean = {
getMenuInflater().inflate(R.menu.options, menu);
true
}
override def onPrepareOptionsMenu(menu : Menu) = uihelper.onPrepareOptionsMenu(menu)
override def onOptionsItemSelected(mi : MenuItem) : Boolean = {
uihelper.optionsItemAction(mi)
}
def setupButtons(running : Boolean) {
//singleBtn.setEnabled(!running)
@ -50,7 +45,7 @@ class MainListActivity(actname : String, menuid : Int) extends LoadingListActivi
override def onClick(view : View) {
view.getId match {
case R.id.singlebtn =>
uihelper.passcodeWarning(prefs.getCallsign(), prefs.getPasscode())
passcodeWarning(prefs.getCallsign(), prefs.getPasscode())
startService(AprsService.intent(this, AprsService.SERVICE_ONCE))
setupButtons(true)
case R.id.startstopbtn =>
@ -64,14 +59,6 @@ class MainListActivity(actname : String, menuid : Int) extends LoadingListActivi
}
}
override def onCreateContextMenu(menu : ContextMenu, v : View,
menuInfo : ContextMenu.ContextMenuInfo) {
super.onCreateContextMenu(menu, v, menuInfo)
uihelper.onCreateContextMenu(menu, v, menuInfo)
}
override def onContextItemSelected(item : MenuItem) =
uihelper.contextItemAction(item)
override def onStopLoading() {
super.onStopLoading()
setupButtons(AprsService.running)

Wyświetl plik

@ -14,11 +14,10 @@ import _root_.java.util.ArrayList
// to make scala-style iterating over arraylist possible
import scala.collection.JavaConversions._
class MapAct extends MapActivity with LoadingIndicator {
class MapAct extends MapActivity with UIHelper {
val TAG = "MapAct"
lazy val prefs = new PrefsWrapper(this)
lazy val uihelper = new UIHelper(this, R.id.map, prefs)
menu_id = R.id.map
lazy val mapview = findViewById(R.id.mapview).asInstanceOf[MapView]
lazy val allicons = this.getResources().getDrawable(R.drawable.allicons)
lazy val db = StorageDatabase.open(this)
@ -49,7 +48,7 @@ class MapAct extends MapActivity with LoadingIndicator {
super.onResume()
// only make it default if not tracking
if (targetcall == "")
uihelper.makeLaunchActivity("map")
makeLaunchActivity("map")
}
override def onDestroy() {
@ -62,7 +61,6 @@ class MapAct extends MapActivity with LoadingIndicator {
getMenuInflater().inflate(R.menu.options, menu);
true
}
override def onPrepareOptionsMenu(menu : Menu) = uihelper.onPrepareOptionsMenu(menu)
override def onOptionsItemSelected(mi : MenuItem) : Boolean = {
mi.getItemId match {
@ -78,7 +76,7 @@ class MapAct extends MapActivity with LoadingIndicator {
mi.setChecked(newState)
mapview.setSatellite(newState)
true
case _ => uihelper.optionsItemAction(mi)
case _ => super.onOptionsItemSelected(mi)
}
}
@ -246,7 +244,7 @@ class StationOverlay(icons : Drawable, context : MapAct, db : StorageDatabase) e
override def onTap(index : Int) : Boolean = {
val s = stations(index)
Log.d(TAG, "user clicked on " + s.call)
context.uihelper.openDetails(s.call)
context.openDetails(s.call)
true
}

Wyświetl plik

@ -10,10 +10,8 @@ import _root_.android.view.{Menu, MenuItem, View, Window}
import _root_.android.view.View.OnClickListener
import _root_.android.widget.{ListView,SimpleCursorAdapter}
class StationActivity extends LoadingListActivity with OnClickListener {
lazy val prefs = new PrefsWrapper(this)
lazy val uihelper = new UIHelper(this, -1, prefs)
class StationActivity extends LoadingListActivity
with OnClickListener {
lazy val targetcall = getIntent().getStringExtra("call")
lazy val storage = StorageDatabase.open(this)
@ -55,13 +53,6 @@ class StationActivity extends LoadingListActivity with OnClickListener {
true
}
override def onPrepareOptionsMenu(menu : Menu) = uihelper.onPrepareOptionsMenu(menu)
override def onOptionsItemSelected(mi : MenuItem) : Boolean = {
uihelper.optionsItemAction(mi)
}
override def onListItemClick(l : ListView, v : View, position : Int, id : Long) {
//super.onListItemClick(l, v, position, id)
val c = getListView().getItemAtPosition(position).asInstanceOf[Cursor]
@ -70,16 +61,16 @@ class StationActivity extends LoadingListActivity with OnClickListener {
if (targetcall == call) {
// click on own callssid
uihelper.trackOnMap(call)
trackOnMap(call)
} else {
uihelper.openDetails(call)
openDetails(call)
finish()
}
}
// button actions
override def onClick(view : View) {
uihelper.callsignAction(view.getId, targetcall)
callsignAction(view.getId, targetcall)
}
def load_cursor(i : Intent) = {

Wyświetl plik

@ -10,33 +10,32 @@ import _root_.android.view.{ContextMenu, LayoutInflater, Menu, MenuItem, View}
import _root_.android.widget.AdapterView.AdapterContextMenuInfo
import _root_.android.widget.{EditText, Toast}
class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
extends DialogInterface.OnClickListener
with DialogInterface.OnCancelListener {
trait UIHelper extends Activity
with LoadingIndicator
with DialogInterface.OnClickListener
with DialogInterface.OnCancelListener {
var menu_id : Int = -1
lazy val prefs = new PrefsWrapper(this)
var openedPrefs = false
def onStartLoading() {
ctx.asInstanceOf[LoadingIndicator].onStartLoading()
}
def openDetails(call : String) {
ctx.startActivity(new Intent(ctx, classOf[StationActivity]).putExtra("call", call))
startActivity(new Intent(this, classOf[StationActivity]).putExtra("call", call))
}
def trackOnMap(call : String) {
val text = ctx.getString(R.string.map_track_call, call)
Toast.makeText(ctx, text, Toast.LENGTH_SHORT).show()
ctx.startActivity(new Intent(ctx, classOf[MapAct]).putExtra("call", call))
val text = getString(R.string.map_track_call, call)
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
startActivity(new Intent(this, classOf[MapAct]).putExtra("call", call))
}
def openPrefs(toastId : Int) {
if (openedPrefs) {
// only open prefs once, exit app afterwards
ctx.finish()
finish()
} else {
ctx.startActivity(new Intent(ctx, classOf[PrefsAct]));
Toast.makeText(ctx, toastId, Toast.LENGTH_SHORT).show()
startActivity(new Intent(this, classOf[PrefsAct]));
Toast.makeText(this, toastId, Toast.LENGTH_SHORT).show()
openedPrefs = true
}
}
@ -45,7 +44,7 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
import Backend._
if ((defaultBackendInfo(prefs).need_passcode == PASSCODE_OPTIONAL) &&
!AprsPacket.passcodeAllowed(call, pass, false))
Toast.makeText(ctx, R.string.anon_warning, Toast.LENGTH_LONG).show()
Toast.makeText(this, R.string.anon_warning, Toast.LENGTH_LONG).show()
}
@ -72,7 +71,7 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
pe.putString("ssid", ssid)
case _ =>
Log.d("saveFirstRun", "could not split callsign")
ctx.finish()
finish()
return
}
if (passcode != "")
@ -82,12 +81,12 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
}
def firstRunDialog() = {
val inflater = ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE)
.asInstanceOf[LayoutInflater]
val fr_view = inflater.inflate(R.layout.firstrunview, null, false)
val fr_call = fr_view.findViewById(R.id.callsign).asInstanceOf[EditText]
val fr_pass = fr_view.findViewById(R.id.passcode).asInstanceOf[EditText]
new AlertDialog.Builder(ctx).setTitle(ctx.getString(R.string.fr_title))
new AlertDialog.Builder(this).setTitle(getString(R.string.fr_title))
.setView(fr_view)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@ -98,21 +97,21 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
fr_pass.getText().toString())
checkConfig()
case _ =>
ctx.finish()
finish()
}
}})
.setNeutralButton(R.string.p_passreq, new UrlOpener(ctx, ctx.getString(R.string.passcode_url)))
.setNeutralButton(R.string.p_passreq, new UrlOpener(this, getString(R.string.passcode_url)))
.setNegativeButton(android.R.string.cancel, this)
.setOnCancelListener(this)
.create.show
}
// DialogInterface.OnClickListener
override def onClick(d : DialogInterface, which : Int) {
ctx.finish()
finish()
}
// DialogInterface.OnCancelListener
override def onCancel(d : DialogInterface) {
ctx.finish()
finish()
}
// store the activity name for next APRSdroid launch
@ -140,29 +139,29 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
}
def aboutDialog() {
val pi = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0)
val title = ctx.getString(R.string.ad_title, pi.versionName);
val inflater = ctx.getLayoutInflater()
val pi = getPackageManager().getPackageInfo(this.getPackageName(), 0)
val title = getString(R.string.ad_title, pi.versionName);
val inflater = getLayoutInflater()
val aboutview = inflater.inflate(R.layout.aboutview, null)
new AlertDialog.Builder(ctx).setTitle(title)
new AlertDialog.Builder(this).setTitle(title)
.setView(aboutview)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(android.R.string.ok, null)
.setNeutralButton(R.string.ad_homepage, new UrlOpener(ctx, "http://aprsdroid.org/"))
.setNeutralButton(R.string.ad_homepage, new UrlOpener(this, "http://aprsdroid.org/"))
.create.show
}
def ageDialog() {
val minutes = ctx.getResources().getStringArray(R.array.age_minutes)
val minutes = getResources().getStringArray(R.array.age_minutes)
val selected = minutes.indexOf(prefs.getString("show_age", "30"))
new AlertDialog.Builder(ctx).setTitle(ctx.getString(R.string.age))
new AlertDialog.Builder(this).setTitle(getString(R.string.age))
.setSingleChoiceItems(R.array.ages, selected, new DialogInterface.OnClickListener() {
override def onClick(d : DialogInterface, which : Int) {
Log.d("onClick", "clicked on: " + d + " " + which)
val min = ctx.getResources().getStringArray(R.array.age_minutes)(which)
val min = getResources().getStringArray(R.array.age_minutes)(which)
prefs.prefs.edit().putString("show_age", min).commit()
ctx.sendBroadcast(new Intent(AprsService.UPDATE))
sendBroadcast(new Intent(AprsService.UPDATE))
onStartLoading()
d.dismiss()
}})
@ -171,7 +170,7 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
.create.show
}
def onPrepareOptionsMenu(menu : Menu) : Boolean = {
abstract override def onPrepareOptionsMenu(menu : Menu) : Boolean = {
val mi = menu.findItem(R.id.startstopbtn)
mi.setTitle(if (AprsService.running) R.string.stoplog else R.string.startlog)
mi.setIcon(if (AprsService.running) android.R.drawable.ic_menu_close_clear_cancel else android.R.drawable.ic_menu_compass)
@ -185,14 +184,14 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
true
}
def optionsItemAction(mi : MenuItem) : Boolean = {
abstract override def onOptionsItemSelected(mi : MenuItem) : Boolean = {
mi.getItemId match {
case R.id.preferences =>
ctx.startActivity(new Intent(ctx, classOf[PrefsAct]));
startActivity(new Intent(this, classOf[PrefsAct]));
true
case R.id.clear =>
onStartLoading()
new StorageCleaner(StorageDatabase.open(ctx)).execute()
new StorageCleaner(StorageDatabase.open(this)).execute()
true
case R.id.about =>
aboutDialog()
@ -202,50 +201,51 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
true
// switch between activities
case R.id.hub =>
ctx.startActivity(new Intent(ctx, classOf[HubActivity]));
startActivity(new Intent(this, classOf[HubActivity]));
true
case R.id.map =>
ctx.startActivity(new Intent(ctx, classOf[MapAct]));
startActivity(new Intent(this, classOf[MapAct]));
true
case R.id.log =>
ctx.startActivity(new Intent(ctx, classOf[LogActivity]));
startActivity(new Intent(this, classOf[LogActivity]));
true
// toggle service
case R.id.startstopbtn =>
val is_running = AprsService.running
if (!is_running) {
passcodeWarning(prefs.getCallsign(), prefs.getPasscode())
ctx.startService(AprsService.intent(ctx, AprsService.SERVICE))
startService(AprsService.intent(this, AprsService.SERVICE))
} else {
ctx.stopService(AprsService.intent(ctx, AprsService.SERVICE))
stopService(AprsService.intent(this, AprsService.SERVICE))
}
true
case R.id.singlebtn =>
passcodeWarning(prefs.getCallsign(), prefs.getPasscode())
ctx.startService(AprsService.intent(ctx, AprsService.SERVICE_ONCE))
startService(AprsService.intent(this, AprsService.SERVICE_ONCE))
true
// quit the app
//case R.id.quit =>
// // XXX deprecated!
// ctx.stopService(AprsService.intent(ctx, AprsService.SERVICE))
// ctx.finish();
// stopService(AprsService.intent(this, AprsService.SERVICE))
// finish();
// true
case _ => false
}
}
def onCreateContextMenu(menu : ContextMenu, v : View,
abstract override def onCreateContextMenu(menu : ContextMenu, v : View,
menuInfo : ContextMenu.ContextMenuInfo) {
super.onCreateContextMenu(menu, v, menuInfo)
val call = menuInfoCall(menuInfo)
if (call == null)
return
ctx.getMenuInflater().inflate(R.menu.context_call, menu)
getMenuInflater().inflate(R.menu.context_call, menu)
menu.setHeaderTitle(call)
}
def menuInfoCall(menuInfo : ContextMenu.ContextMenuInfo) : String = {
val i = menuInfo.asInstanceOf[AdapterContextMenuInfo]
// a listview with a database backend gives out a cursor :D
val c = ctx.asInstanceOf[ListActivity].getListView()
val c = asInstanceOf[ListActivity].getListView()
.getItemAtPosition(i.position).asInstanceOf[android.database.Cursor]
StorageDatabase.cursor2call(c)
}
@ -260,12 +260,12 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
true
case R.id.aprsfibutton =>
val url = "http://aprs.fi/?call=%s".format(targetcall)
ctx.startActivity(new Intent(Intent.ACTION_VIEW,
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse(url)))
true
case R.id.qrzcombutton =>
val url = "http://qrz.com/db/%s".format(targetcall.split("[- ]+")(0))
ctx.startActivity(new Intent(Intent.ACTION_VIEW,
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse(url)))
true
case _ =>
@ -285,7 +285,7 @@ class UIHelper(ctx : Activity, menu_id : Int, prefs : PrefsWrapper)
}
override def onPostExecute(x : Unit) {
Log.d("StorageCleaner", "broadcasting...")
ctx.sendBroadcast(new Intent(AprsService.UPDATE))
sendBroadcast(new Intent(AprsService.UPDATE))
}
}
}