1 package org
.netxms
.ui
.android
.main
.activities
;
3 import java
.util
.ArrayList
;
5 import org
.netxms
.base
.NXCommon
;
6 import org
.netxms
.client
.objects
.AbstractObject
;
7 import org
.netxms
.client
.objects
.GenericObject
;
8 import org
.netxms
.ui
.android
.R
;
9 import org
.netxms
.ui
.android
.main
.adapters
.ActivityListAdapter
;
10 import org
.netxms
.ui
.android
.main
.fragments
.AlarmBrowserFragment
;
11 import org
.netxms
.ui
.android
.service
.ClientConnectorService
.ConnectionStatus
;
13 import android
.annotation
.SuppressLint
;
14 import android
.content
.ComponentName
;
15 import android
.content
.Intent
;
16 import android
.content
.SharedPreferences
;
17 import android
.content
.res
.Configuration
;
18 import android
.os
.Build
;
19 import android
.os
.Bundle
;
20 import android
.os
.Handler
;
21 import android
.os
.IBinder
;
22 import android
.preference
.PreferenceManager
;
23 import android
.view
.Menu
;
24 import android
.view
.MenuItem
;
25 import android
.view
.View
;
26 import android
.widget
.AdapterView
;
27 import android
.widget
.AdapterView
.OnItemClickListener
;
28 import android
.widget
.GridView
;
29 import android
.widget
.TextView
;
30 import android
.widget
.Toast
;
33 * Home screen activity
35 * @author Victor Kirhenshtein
36 * @author Marco Incalcaterra (marco.incalcaterra@thinksoft.it)
40 public class HomeScreen
extends AbstractClientActivity
implements OnItemClickListener
42 public static final int ACTIVITY_ALARMS
= 1;
43 public static final int ACTIVITY_DASHBOARDS
= 2;
44 public static final int ACTIVITY_NODES
= 3;
45 public static final int ACTIVITY_ENTIRENETWORK
= 4;
46 public static final int ACTIVITY_GRAPHS
= 5;
47 public static final int ACTIVITY_MACADDRESS
= 6;
48 public static final String INTENTIONAL_EXIT_KEY
= "IntentionalExit";
50 private ActivityListAdapter adapter
;
51 private TextView statusText
;
56 * @see org.netxms.ui.android.main.activities.AbstractClientActivity#onCreateStep2(android.os.Bundle)
59 public void onCreateStep2(Bundle savedInstanceState
)
61 setIntentionalExit(false);// Allow autorestart on change connectivity status for premature exit
62 setContentView(R
.layout
.homescreen
);
64 GridView gridview
= (GridView
)findViewById(R
.id
.ActivityList
);
65 if (getResources().getConfiguration().orientation
== Configuration
.ORIENTATION_LANDSCAPE
)
66 gridview
.setNumColumns(5);
68 gridview
.setNumColumns(2);
69 adapter
= new ActivityListAdapter(this);
70 gridview
.setAdapter(adapter
);
71 gridview
.setOnItemClickListener(this);
73 statusText
= (TextView
)findViewById(R
.id
.ScreenTitleSecondary
);
75 TextView buildName
= (TextView
)findViewById(R
.id
.MainScreenVersion
);
76 buildName
.setText(getString(R
.string
.version
) + " " + NXCommon
.VERSION
+ " (" + getString(R
.string
.build_number
) + ")");
82 * @see org.netxms.ui.android.main.activities.AbstractClientActivity#onServiceConnected(android.content.ComponentName,
86 public void onServiceConnected(ComponentName name
, IBinder binder
)
88 super.onServiceConnected(name
, binder
);
89 service
.registerHomeScreen(this);
90 setStatusText(service
.getConnectionStatusText(), service
.getConnectionStatusColor());
91 refreshActivityStatus();
97 * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
99 @SuppressLint("InlinedApi")
101 public boolean onCreateOptionsMenu(Menu menu
)
103 super.onCreateOptionsMenu(menu
);
104 if (Build
.VERSION
.SDK_INT
>= Build
.VERSION_CODES
.HONEYCOMB
)
105 menu
.removeItem(android
.R
.id
.home
);
106 menu
.add(Menu
.NONE
, R
.string
.reconnect
, Menu
.NONE
, getString(R
.string
.reconnect
)).setIcon(android
.R
.drawable
.ic_menu_revert
);
107 menu
.add(Menu
.NONE
, R
.string
.exit
, Menu
.NONE
, getString(R
.string
.exit
)).setIcon(android
.R
.drawable
.ic_menu_close_clear_cancel
);
114 * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
117 public boolean onOptionsItemSelected(MenuItem item
)
119 if (item
.getItemId() == R
.string
.reconnect
)
122 service
.reconnect(true);
125 else if (item
.getItemId() == R
.string
.exit
)
130 return super.onOptionsItemSelected(item
);
136 * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long)
139 public void onItemClick(AdapterView
<?
> parent
, View view
, int position
, long id
)
141 // Avoid starting activity if no connection
142 if (service
!= null && (service
.getConnectionStatus() == ConnectionStatus
.CS_CONNECTED
|| service
.getConnectionStatus() == ConnectionStatus
.CS_ALREADYCONNECTED
))
145 case ACTIVITY_ALARMS
:
146 startActivity(new Intent(this, AlarmBrowserFragment
.class));
149 startActivity(new Intent(this, NodeBrowser
.class).putExtra("parentId", GenericObject
.SERVICEROOT
));
151 case ACTIVITY_ENTIRENETWORK
:
152 startActivity(new Intent(this, NodeBrowser
.class).putExtra("parentId", GenericObject
.NETWORK
));
154 case ACTIVITY_GRAPHS
:
155 startActivity(new Intent(this, GraphBrowser
.class));
157 case ACTIVITY_MACADDRESS
:
158 startActivity(new Intent(this, ConnectionPointBrowser
.class));
160 case ACTIVITY_DASHBOARDS
:
161 startActivity(new Intent(this, DashboardBrowser
.class));
167 showToast(getString(R
.string
.notify_disconnected
));
173 public void setStatusText(String text
, int color
)
175 statusText
.setTextColor(color
);
176 statusText
.setText(text
);
179 public void showToast(final String text
)
181 new Handler(getMainLooper()).post(new Runnable()
186 Toast
.makeText(getApplicationContext(), text
, Toast
.LENGTH_SHORT
).show();
192 * Exit from app and shutdown service
198 setIntentionalExit(true);// Avoid autorestart on change connectivity status for intentional exit
199 moveTaskToBack(true);
204 * Refresh pending status of alarms, called from service
206 public void refreshPendingAlarms()
208 adapter
.setPendingAlarms(service
.getAlarms().length
);
209 adapter
.notifyDataSetChanged();
213 * Refresh the activity status, called from service
215 public void refreshActivityStatus()
217 refreshPendingAlarms();
218 ArrayList
<AbstractObject
> objList
= new ArrayList
<AbstractObject
>();
219 objList
.add(service
.findObjectById(GenericObject
.NETWORK
));
220 objList
.add(service
.findObjectById(GenericObject
.SERVICEROOT
));
221 objList
.add(service
.findObjectById(GenericObject
.DASHBOARDROOT
));
222 adapter
.setTopNodes(objList
);
223 adapter
.notifyDataSetChanged();
227 * Set a flag to inform about an intentional exit to avoid
228 * automatic reconnection on change connectivity status
230 * @param flag true to signal an intentional exit
232 private void setIntentionalExit(boolean flag
)
234 SharedPreferences prefs
= PreferenceManager
.getDefaultSharedPreferences(this);
235 SharedPreferences
.Editor editor
= prefs
.edit();
236 editor
.putBoolean(INTENTIONAL_EXIT_KEY
, flag
);