Hi can you please help me with some instructions / sample code or even make a project for me?
The idea is – client open the box, turn on the tablet, and a promo video runs.
How would you make a video run on startup with an android device (it’s Android 2.2 Froyo)? Could be a boot animation or video? Or does android have the equivalent of an .ini file that will open a file on startup?
Many ta...
You can turn the video into boot animation. The one that you see normally in every android devices is bootanimation.
Accidentally sent from my Nexus S using XDA Premium App
You can add a broadcast receiver to your app and add a .BootReceiver to your Intent filter in the manifest.
Now your app will auto run at boot.
Manifest:
Code:
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
BootReceiver.java:
Code:
package com.example.myactivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i=new Intent(context, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
melvinchng said:
You can turn the video into boot animation. The one that you see normally in every android devices is bootanimation.
Accidentally sent from my Nexus S using XDA Premium App
Click to expand...
Click to collapse
Thanks, that was my idea first.. but video will be HD 2-3 mins duration so there is no way having this converted into boot animation But thanks on your reply!
Gene Poole said:
You can add a broadcast receiver to your app and add a .BootReceiver to your Intent filter in the manifest.
Now your app will auto run at boot.
Manifest:
Code:
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
BootReceiver.java:
Code:
package com.example.myactivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i=new Intent(context, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Click to expand...
Click to collapse
Thanks, Im trying But even the simplest Hello, World tutorial http://developer.android.com/resources/tutorials/hello-world.html gives me errors. Am I maybe using wrong Eclipse version?
(Eclipse Java EE IDE for Web Developers.
Version: Indigo Release
Build id: 20110615-0604)
I have send you PM so If you have time to try it. Its the working project from one programmer.. but it autoruns shell script.. I would change that and play a video instead.
Hello, this is Chris talking, your fellow Time Keeper (yeah, I was nicknamed) and this is my tutorial on how to build a simple, lightweight analog clock!
______________________________________________________________
This guide assumes that you have successfully set up the Android SDK, ADT, Eclipse, some basic Java knowledge and image editing skills.
_______________________________________________________________
Let's start!
Go to the menu bar and click File > New > Android Project
Give your project a name, such as "XDA Devs Clock". Anything you prefer. This isn't going to affect the final app.
Next, select Android 1.6 as the build target. Analog clocks don't require anything special.
Now it's time to create the package name. I usually make mine like "com.xda.clock.chris".
Untick the "Create Activity" checkbox.
Info: We don't need to create an Activity because we are making a widget. Widgets don't have Activities, otherwise, they would be shown in the app drawer.
Click Finish and Eclipse will set up the project.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
________________________________________________________________
Next up, you need to make 3 images for the clock:
The dial (which is the clock's background)
The hour's hand
The minute's hand
Use your incredible Photoshop/GIMP/Illustrator skills to make your awesome clock!
Few tips:
Make the canvas 300*300 pixels
Make the dial with 10% padding
To easily make the hands, keep the dial background and draw the hour's and minute's hand as they were at position zero (Hour at 12 o'clock and minute at zero). Erase the dial and save each hand image
Save with a .png extension. So, in the end, you will have 3 images. Name them:
hand_dial.png
hand_minute.png
hand_hour.png
All lower case. It is extremely important or else you will get an error!
Also, create an app icon. You need to make 3 different ones for every screen size.
HDPI - 72*72 px
MDPI - 48*48 px
LDPI - 36*36 px
Save them with the name "ic_launcher.png" and overwrite the images that are already in the project's respective folders.
________________________________________________________________
Following, we gotta put them to our app.
So, first, right-click res > New > New folder and name it "drawable".
Drag your images you created previously into there.
Now, let's make the layout of the clock.
Go to res > layout > main.xml
Go to the main.xml tab (at the bottom) and delete the TextView block. Next, change the layout from Linear to Relative.
Now, we will add the clock's code.
Code:
<AnalogClock
android:id="@+id/analogClock1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:dial="@drawable/hand_dial"
android:hand_minute="@drawable/hand_minute"
android:hand_hour="@drawable/hand_hour"/>
So, what did we do there?
We gave the item an id
We put it in the middle of the screen
We redirected the drawables to the respective hand and dial
The final xml is this:
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<AnalogClock
android:id="@+id/analogClock1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:dial="@drawable/hand_dial"
android:hand_minute="@drawable/hand_minute"
android:hand_hour="@drawable/hand_hour"/>
</RelativeLayout>
_______________________________________________________________
Next, we need to tell Android that what we are actually doing is a widget.
Right click res and create a folder named "xml".
Right clock xml > New > Android XML file
Change the Resource Type to AppWidgetProvider and give it a name such as "widget_config.xml". Lower case!
Delete everything and paste this in:
Code:
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="140dip"
android:minHeight="140dip"
android:updatePeriodMillis="0"
android:initialLayout="@layout/main"/>
There we set how many rows the widget will take. The calculation method is
74 * [number of rows] - 4
We want the widget to be 2*2 so the width is 146dip and the height is also 146dip. But we'll change it to 140 to make it a little bigger.
Then we set an update period... which actually doesn't work below 30 minutes. It's a bug in Android and last, we gave it a layout, which we made previously (main.xml).
____________________________________________________________
Now, we must declare the widget in the manifest.xml with a <receiver> element.
Open the manifest xml and delete the <activity> block. As said previously, we won't have any activity.
Inside the <application> add this piece of code:
Code:
<receiver android:name=".Clock_Actions" android:label="XDA Analog Clock">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config" />
</receiver>
The android:name is the class we are going to create in a few minutes.
The label is the name that will be shown in the widget picker of your homescreen. Then we specified the update and linked the widget_config.xml
The final xml is:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xda.clock.chris"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".Clock_Actions" android:label="XDA Analog Clock">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config" />
</receiver>
</application>
</manifest>
_______________________________________________________________
Now it's time to create the Clock_Actions class.
Right click the package > New > Class
Give it the above name.
Delete everything and paste this in:
Code:
package com.xda.clock.chris;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.widget.RemoteViews;
public class Clock_Actions extends AppWidgetProvider{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
PendingIntent pendingIntent;
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action))
{
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.main);
pendingIntent = PendingIntent.getActivity(context, 0,getAlarmPackage(context), 0);
views.setOnClickPendingIntent(R.id.analogClock1, pendingIntent);
AppWidgetManager
.getInstance(context)
.updateAppWidget(
intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS),
views);
}
}
public Intent getAlarmPackage(Context context)
{
PackageManager packageManager = context.getPackageManager();
Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
String clockImpls[][] = {
{ "Standard Alarm", "com.android.alarmclock",
"com.android.alarmclock.AlarmClock" },
{ "HTC Alarm ClockDT", "com.htc.android.worldclock",
"com.htc.android.worldclock.WorldClockTabControl" },
{ "Standard Alarm ClockDT", "com.android.deskclock",
"com.android.deskclock.AlarmClock" },
{ "Froyo Nexus Alarm ClockDT",
"com.google.android.deskclock",
"com.android.deskclock.DeskClock" },
{ "Moto Blur Alarm ClockDT",
"com.motorola.blur.alarmclock",
"com.motorola.blur.alarmclock.AlarmClock" },
{ "Samsung Galaxy S", "com.sec.android.app.clockpackage",
"com.sec.android.app.clockpackage.ClockPackage" } };
boolean foundClockImpl = false;
for (int i = 0; i < clockImpls.length; i++)
{
String packageName = clockImpls[i][1];
String className = clockImpls[i][2];
try
{
ComponentName cn = new ComponentName(packageName, className);
packageManager.getActivityInfo(cn,PackageManager.GET_META_DATA);
AlarmClockIntent.setComponent(cn);
foundClockImpl = true;
} catch (NameNotFoundException nf)
{
}
}
if (foundClockImpl)
{
return AlarmClockIntent;
}
else
{
return null;
}
}
}
Change the package name to your own after pasting.
So here, we set up the update, the remote views and the pending intent which redirects you to the Desk Clock app. Because different phones have different Desk Clock package names, we set up a method to handle that.
Many thanks to sndytime. Got the code from his post here.
____________________________________________________________
Next up...nothing! Our clock is done! We just have to export it.
Right click the project > Android tools > Export signed application
Choose next, select Create new keystore > click browse and give it a name.
Create a password and click next.
In alias put whatever you want. I usually put "chris95x8"
Enter your password again and put, like, 100 year for validity. You get the rest.
Click Next, browse and enter a name for the apk.
Click Finish and congrats on your first analog clock! Yay!
If you have done everything right it should work. Otherwise, comment here on the thread.
*Sorry for big images
______________________________________________________________
I hope to see some clock on the Themes & Apps section soon. Good luck everyone!
Exelent guide buddy
Another score for successful guides
W!LßSO @ XDA
Thanks Chris.
Will come in handy.
-----------------
- Swift -, formerly known as IrishStuff09
Thank you Chris !
Sent from my X8 using xda premium
great tutorial buddy!
getting right to do the job!
I made one sometime ago but all ended when started to add settings
Anything didnt work anymore from then on
Lol interesting, thanks.
Too fun ! Thank you dude !
Great Job Chriss, nice and clear. However I still menaged to get stuck.
Now it's time to create the Clock_Actions class.
Right click the package > New > Class
Click to expand...
Click to collapse
Where/what should I right click?
For now I created in in src folder in (default package), but I get 3 errors, so I assume I did it wrong.
Anyway tutorial looks great
Chris95X8 said:
Hello, this is Chris talking, your fellow Time Keeper (yeah, I was nicknamed) and this is my tutorial on how to build a simple, lightweight analog clock!
______________________________________________________________
This guide assumes that you have successfully set up the Android SDK, ADT, Eclipse, some basic Java knowledge and image editing skills.
_______________________________________________________________
Let's start!
Go to the menu bar and click File > New > Android Project
Give your project a name, such as "XDA Devs Clock". Anything you prefer. This isn't going to affect the final app.
Next, select Android 1.6 as the build target. Analog clocks don't require anything special.
Now it's time to create the package name. I usually make mine like "com.xda.clock.chris".
Untick the "Create Activity" checkbox.
Info: We don't need to create an Activity because we are making a widget. Widgets don't have Activities, otherwise, they would be shown in the app drawer.
Click Finish and Eclipse will set up the project.
________________________________________________________________
Next up, you need to make 3 images for the clock:
The dial (which is the clock's background)
The hour's hand
The minute's hand
Use your incredible Photoshop/GIMP/Illustrator skills to make your awesome clock!
Few tips:
Make the canvas 300*300 pixels
Make the dial with 10% padding
To easily make the hands, keep the dial background and draw the hour's and minute's hand as they were at position zero (Hour at 12 o'clock and minute at zero). Erase the dial and save each hand image
Save with a .png extension. So, in the end, you will have 3 images. Name them:
hand_dial.png
hand_minute.png
hand_hour.png
All lower case. It is extremely important or else you will get an error!
Also, create an app icon. You need to make 3 different ones for every screen size.
HDPI - 72*72 px
MDPI - 48*48 px
LDPI - 36*36 px
Save them with the name "ic_launcher.png" and overwrite the images that are already in the project's respective folders.
________________________________________________________________
Following, we gotta put them to our app.
So, first, right-click res > New > New folder and name it "drawable".
Drag your images you created previously into there.
Now, let's make the layout of the clock.
Go to res > layout > main.xml
Go to the main.xml tab (at the bottom) and delete the TextView block. Next, change the layout from Linear to Relative.
Now, we will add the clock's code.
Code:
<AnalogClock
android:id="@+id/analogClock1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:dial="@drawable/hand_dial"
android:hand_minute="@drawable/hand_minute"
android:hand_hour="@drawable/hand_hour"/>
So, what did we do there?
We gave the item an id
We put it in the middle of the screen
We redirected the drawables to the respective hand and dial
The final xml is this:
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<AnalogClock
android:id="@+id/analogClock1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:dial="@drawable/hand_dial"
android:hand_minute="@drawable/hand_minute"
android:hand_hour="@drawable/hand_hour"/>
</RelativeLayout>
_______________________________________________________________
Next, we need to tell Android that what we are actually doing is a widget.
Right click res and create a folder named "xml".
Right clock xml > New > Android XML file
Change the Resource Type to AppWidgetProvider and give it a name such as "widget_config.xml". Lower case!
Delete everything and paste this in:
Code:
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dip"
android:minHeight="146dip"
android:updatePeriodMillis="0"
android:initialLayout="@layout/main"/>
There we set how many rows the widget will take. The calculation method is
74 * [number of rows] - 4
We want the widget to be 2*2 so the width is 146dip and the height is also 146dip.
Then we set an update period... which actually doesn't work below 30 minutes. It's a bug in Android and last, we gave it a layout, which we made previously (main.xml).
____________________________________________________________
Now, we must declare the widget in the manifest.xml with a <receiver> element.
Open the manifest xml and delete the <activity> block. As said previously, we won't have any activity.
Inside the <application> add this piece of code:
Code:
<receiver android:name=".Clock_Actions" android:label="XDA Analog Clock">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config" />
</receiver>
The android:name is the class we are going to create in a few minutes.
The label is the name that will be shown in the widget picker of your homescreen. Then we specified the update and linked the widget_config.xml
The final xml is:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xda.clock.chris"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".Clock_Actions" android:label="XDA Analog Clock">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config" />
</receiver>
</application>
</manifest>
_______________________________________________________________
Now it's time to create the Clock_Actions class.
Right click the package > New > Class
Give it the above name.
Delete everything and paste this in:
Code:
package com.xda.clock.chris;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.widget.RemoteViews;
public class Clock_Actions extends AppWidgetProvider{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
PendingIntent pendingIntent;
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action))
{
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.main);
pendingIntent = PendingIntent.getActivity(context, 0,getAlarmPackage(context), 0);
views.setOnClickPendingIntent(R.id.analogClock1, pendingIntent);
AppWidgetManager
.getInstance(context)
.updateAppWidget(
intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS),
views);
}
}
public Intent getAlarmPackage(Context context)
{
PackageManager packageManager = context.getPackageManager();
Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
String clockImpls[][] = {
{ "Standard Alarm", "com.android.alarmclock",
"com.android.alarmclock.AlarmClock" },
{ "HTC Alarm ClockDT", "com.htc.android.worldclock",
"com.htc.android.worldclock.WorldClockTabControl" },
{ "Standard Alarm ClockDT", "com.android.deskclock",
"com.android.deskclock.AlarmClock" },
{ "Froyo Nexus Alarm ClockDT",
"com.google.android.deskclock",
"com.android.deskclock.DeskClock" },
{ "Moto Blur Alarm ClockDT",
"com.motorola.blur.alarmclock",
"com.motorola.blur.alarmclock.AlarmClock" },
{ "Samsung Galaxy S", "com.sec.android.app.clockpackage",
"com.sec.android.app.clockpackage.ClockPackage" } };
boolean foundClockImpl = false;
for (int i = 0; i < clockImpls.length; i++)
{
String packageName = clockImpls[i][1];
String className = clockImpls[i][2];
try
{
ComponentName cn = new ComponentName(packageName, className);
packageManager.getActivityInfo(cn,PackageManager.GET_META_DATA);
AlarmClockIntent.setComponent(cn);
foundClockImpl = true;
} catch (NameNotFoundException nf)
{
}
}
if (foundClockImpl)
{
return AlarmClockIntent;
}
else
{
return null;
}
}
}
Change the package name to your own after pasting.
So here, we set up the update, the remote views and the pending intent which redirects you to the Desk Clock app. Because different phones have different Desk Clock package names, we set up a method to handle that.
Many thanks to sndytime. Got the code from his post here.
____________________________________________________________
Next up...nothing! Our clock is done! We just have to export it.
Right click the project > Android tools > Export signed application
Choose next, select Create new keystore > click browse and give it a name.
Create a password and click next.
In alias put whatever you want. I usually put "chris95x8"
Enter your password again and put, like, 100 year for validity. You get the rest.
Click Next, browse and enter a name for the apk.
Click Finish and congrats on your first analog clock! Yay!
If you have done everything right it should work. Otherwise, comment here on the thread.
*Sorry for big images
______________________________________________________________
I hope to see some clock on the Themes & Apps section soon. Good luck everyone!
Click to expand...
Click to collapse
U awe from me a thanks and a beer.. N1 bro.. :beer::thumbup:
Sent from my GT-S6102 using xda premium
west1988 said:
Great Job Chriss, nice and clear. However I still menaged to get stuck.
Where/what should I right click?
For now I created in in src folder in (default package), but I get 3 errors, so I assume I did it wrong.
Anyway tutorial looks great
Click to expand...
Click to collapse
Stupid me. It shouldn't be a default package, but a one with my unique name that I needed to create
Great lesson and I have my very own clock now
west1988 said:
Stupid me. It shouldn't be a default package, but a one with my unique name that I needed to create
Great lesson and I have my very own clock now
Click to expand...
Click to collapse
Will you post it?
Sent from my HTC One S
It is just a photo of my old friends and me as a dial of the clock, so nothing fancy
Hi,How to add second to it?
Hello.Thank you for this great tutorial.I'm beginner and i have problem with clock.When i use clock with some of launchers Go Launcher,Apex launcher.. when restert phone i get error-Problem loading widget.Pleace help me.Sorry for my English
so how to add date & weather to it ?
Cant find main xml
First off, wonderful tutorial! Thanks :good:
So, forgive my n00bness please. I've never fully taken on the world of designing apps or widgets so much of this is new to me. I set everything up according to directions but have gotten stuck looking for the main xml file. After an hour or so of looking, and looking... and looking, I CAN NOT for the life of me seem to locate it anywhere. I have downloaded the most recent ADT package ( build: v21.0.0-519525 ) and it's running Eclipse 3.8. I've included a screenshot. Not sure if I've done something wrong or what, but I'm guessing it's most likely in plain sight. I am just not sure where to begin to look! Any help would be awesome, I have a slew of custom new clocks I feel the Android community would love :fingers-crossed:
EDIT: I've gone through and manually added an Android XML Layout file to the layout folder with the name of main.xml. After doing this I've gone through and followed step by step everything to the T. Everything checks out in the end after exporting, and even installs correctly. However, it does not show up in my widgets list or App drawer, and when trying to launch it from a file manager it says it cannot be launched.
Help!
WORKING!
D4RRYLJ4RVIS said:
First off, wonderful tutorial! Thanks :good:
So, forgive my n00bness please. I've never fully taken on the world of designing apps or widgets so much of this is new to me. I set everything up according to directions but have gotten stuck looking for the main xml file. After an hour or so of looking, and looking... and looking, I CAN NOT for the life of me seem to locate it anywhere. I have downloaded the most recent ADT package ( build: v21.0.0-519525 ) and it's running Eclipse 3.8. I've included a screenshot. Not sure if I've done something wrong or what, but I'm guessing it's most likely in plain sight. I am just not sure where to begin to look! Any help would be awesome, I have a slew of custom new clocks I feel the Android community would love :fingers-crossed:
EDIT: I've gone through and manually added an Android XML file to the layout folder with the name of main.xml. After doing this I've gone through and followed step by step everything to the T. Everything checks out in the end after exporting, and even installs correctly. However, it does not show up in my widgets list or App drawer, and when trying to launch it from a file manager it says it cannot be launched.
Help!
Click to expand...
Click to collapse
NEVERMIND! Ran into the same problem as West1988. Changed the package name to the unique name selected in the beginning of the project and, voila! LAZR CLOCK! I'll be posting this on the Play store soon for anyone to download. Thanks Chris!
Oh, glad you sorted it out. And my God! Awesome clock man!!!
Sent from my HTC One S using xda app-developers app
Thanks for this tut Chris!
I made one but I was really bored to make good graphs...but it works!!!!
Sent from my X8 using xda premium
I hope this is the correct forum
I am doing this to Cyanogenmod 11.
I want to add an option to Settings > Interface > Status Bar > Signal Status Style. I am so close to having it done, but there is one thing I am missing, and that is actually getting the radio button to switch the Icon to the correct .java. Here is what I have done so far:
Added to Setting/res/values/cm_strings.xml;
Code:
<string name="status_bar_signal_style_always">Always show type</string>
Added two lines to Settings/res/values/cm_arrays.xml;(marked with *'s)
Code:
<string-array name="entries_status_bar_signal" translatable="false">
<item>@string/status_bar_signal_style_icon</item>
<item>@string/status_bar_signal_style_text</item>
*<item>@string/status_bar_signal_style_always</item>
<item>@string/status_bar_style_hidden</item>
</string-array>
<string-array name="values_status_bar_signal" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
*<item>3</item>
</string-array>
Created a new java file named SignalClusterAlwaysView.java in SystemUI/src/com/android/systemui/statusbar and signal_cluster_always_view.xml in SystemUI/res/layout, respectively;
Added to SystemUI/res/layout/status_bar.xml;
Code:
<include layout="@layout/signal_cluster_always_view"
android:id="@+id/signal_cluster_always"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Added (changed STYLE_HIDDEN to 3) in SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java.
Code:
public static final int STYLE_ALWAYS = 2;
Really all I am trying to do is create a setting to show network type even while WiFi is connected. This is accomplished by simply clearing this line from SignalClusterView.java,
Code:
mMobileType.setVisibility(
!mWifiVisible ? View.VISIBLE : View.GONE);
and changing android:layout_marginEnd to 3dip in signal_cluster_view.xml.
I can't seem to figure out how the existing setting for a text only network icon sends that to SystemUI. I've explored StatusBar.java in the Settings.apk source, and I think the issue may be in this line,
Code:
int signalStyle = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_SIGNAL_TEXT, 0);
where it is setting the value of the option selected to Settings.System.STATUS_BAR_SIGNAL_TEXT. I think it is properly setting the value to 2, like I want, but it still sees 2 as HIDDEN instead of ALWAYS; or that it does see I want ALWAYS, but doesn't know to refer to SignalClusterAlwaysView.java in SystemUI.
What am I missing? Is there an easier way to do this?
Sorry if this is in the wrong thread.
I just checked, and yes, the value of STATUS_BAR_SIGNAL is changing to my intended values. My one missing link is defining what those values do.
Where is the file that contains the value assignments? i.e. STATUS_BAR_SIGNAL = 1 starts StatusBarTextView.java in systemui, while 2 and 3 don't do anything. I don't care about 3, just need to make 2 start StatusBarAlwaysView.java (or that process, obviously it isn't .java once compiled).
I answered my own question here: http://stackoverflow.com/questions/21869758/adding-a-setting-option-in-android-settings-apk/21881423#21881423