[App][OpenSource] SMSGear - SMS Application for Gear S3

Search This thread

jamesst20

Senior Member
Jan 31, 2012
1,674
2,190
28
Hi,

I had the chance to try out the Samsung Gear S3 for few days. While this watch is amazing, probably my favorite as today, it sadly has no SMS Application built-in (For Non-Samsung phones), and no SMS Applications on the Samsung Gear Store nether.

I made the project open source, as there is still rooms for improvements.

Product page : https://gitlab.com/Jamesst20/SMSGear

GitLab :
U4ZyqPF.jpg
 
Last edited:

10urshin

Senior Member
Jan 7, 2014
101
46
Hi,

I had the chance to try out the Samsung Gear S3 for few days. While this watch is amazing, probably my favorite as today, it sadly has no SMS Application built-in (For Non-Samsung phones), and no SMS Applications on the Samsung Gear Store nether.

I made the project open source, as there is still rooms for improvements.

Product page : https://gitlab.com/Jamesst20/SMSGear

GitLab :
About circle-helper, this might help https://xdaforums.com/showpost.php?p=70868904&postcount=5, also i haven't run your code yet, why do you need a rotarydetent listener? Snaplist should handle those events already.
 

jamesst20

Senior Member
Jan 31, 2012
1,674
2,190
28
About circle-helper, this might help https://xdaforums.com/showpost.php?p=70868904&postcount=5, also i haven't run your code yet, why do you need a rotarydetent listener? Snaplist should handle those events already.

Thank you for the link, I was the one posting the solution on the thread you posted :) His implementation is different than mine, however, I would be very suprised that it makes a difference for the known issue, as the SnapLists are recreated on the refresh since there is a page change.

Also, the rotarydetent listener is used to scroll sms in conversations (but not conversations list). The reason why is because the SnapList would scroll 1 element per element, making big messages unreadable. Also, it would make a weird scrolling feeling since it's not all list item that have the same height.

It was my first Gear S3/Tizen project ever, maybe you have some knowledge to share :)

Edit :

The Samsung Documentation for Wearable is very very incomplete. Do you know if there are methods such as AddItem/RemoveItem, etc on the ListView ? https://developer.tizen.org/ko/deve...ml/ui_fw_api/wearable/widgets/widget_list.htm
 
Last edited:

10urshin

Senior Member
Jan 7, 2014
101
46
Thank you for the link, I was the one posting the solution on the thread you posted :) His implementation is different than mine, however, I would be very suprised that it makes a difference for the known issue, as the SnapLists are recreated on the refresh since there is a page change.

Also, the rotarydetent listener is used to scroll sms in conversations (but not conversations list). The reason why is because the SnapList would scroll 1 element per element, making big messages unreadable. Also, it would make a weird scrolling feeling since it's not all list item that have the same height.

It was my first Gear S3/Tizen project ever, maybe you have some knowledge to share :)

Edit :

The Samsung Documentation for Wearable is very very incomplete. Do you know if there are methods such as AddItem/RemoveItem, etc on the ListView ? https://developer.tizen.org/ko/deve...ml/ui_fw_api/wearable/widgets/widget_list.htm


Oh, sorry didn't realize it was you :eek: Anyway i have found the problem, snaplist disapears not because circle-helper is not recreating the snaplist on pagebeforeshow but because onReceiveCallback gets called after pagebeforeshow even more than once, so i swapped your circle-helper with mine and fired up updatesnaplist event at the end of onReceiveCallback. Sent the merge request.

And yes it is very incomplete and about the ListView, it has no js methods, none public at least. Here is the source for it.

Code:
    /*global window, define */
    /*
     * Copyright (c) 2015 Samsung Electronics Co., Ltd
     *
     * Licensed under the Flora License, Version 1.1 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://floralicense.org/license/
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    /*jslint nomen: true */
    /**
     * # Listview Widget
     * Shows a list view.
     *
     * The list widget is used to display, for example, navigation data, results, and data entries. The following table describes the supported list classes.
     *
     * ## Default selectors
     *
     * Default selector for listview widget is class *ui-listview*.
     *
     * To add a list widget to the application, use the following code:
     *
     * ### List with basic items
     *
     * You can add a basic list widget as follows:
     *
     *      @example
     *         <ul class="ui-listview">
     *             <li>1line</li>
     *             <li>2line</li>
     *             <li>3line</li>
     *             <li>4line</li>
     *             <li>5line</li>
     *         </ul>
     *
     * ### List with link items
     *
     * You can add a list widget with a link and press effect that allows the user to click each list item as follows:
     *
     *      @example
     *         <ul class="ui-listview">
     *             <li>
     *                 <a href="#">1line</a>
     *             </li>
     *             <li>
     *                 <a href="#">2line</a>
     *             </li>
     *             <li>
     *                 <a href="#">3line</a>
     *             </li>
     *             <li>
     *                 <a href="#">4line</a>
     *             </li>
     *             <li>
     *                 <a href="#">5line</a>
     *             </li>
     *         </ul>
     *
     * ## JavaScript API
     *
     * Listview widget hasn't JavaScript API.
     *
     * @class ns.widget.wearable.Listview
     * @extends ns.widget.BaseWidget
     */
    (function (document, ns) {
        "use strict";
        var BaseWidget = ns.widget.BaseWidget,
                engine = ns.engine,
                Listview = function () {
                },
                prototype = new BaseWidget();

        /**
         * Dictionary for listview related events.
         * For listview, it is an empty object.
         * @property {Object} events
         * @member ns.widget.wearable.Listview
         * @static
         */
        Listview.events = {};

        /**
         * Build Listview
         * @method _build
         * @param {HTMLElement} element
         * @return {HTMLElement}
         * @protected
         * @member ns.widget.wearable.Listview
         */
        prototype._build = function (element) {
            return element;
        };

        prototype._init = function (element) {
            return element;
        };

        prototype._bindEvents = function (element) {
            return element;
        };

        /**
         * Refresh structure
         * @method _refresh
         * @protected
         * @member ns.widget.wearable.Listview
         */
        prototype._refresh = function () {
            return null;
        };

        /**
         * Destroy widget
         * @method _destroy
         * @protected
         * @member ns.widget.wearable.Listview
         */
        prototype._destroy = function () {
            return null;
        };

        Listview.prototype = prototype;
        ns.widget.wearable.Listview = Listview;

        engine.defineWidget(
                "Listview",
                ".ui-listview",
                [],
                Listview,
                "wearable"
                );
    }(window.document, ns));
 
Last edited:
  • Like
Reactions: jamesst20

jamesst20

Senior Member
Jan 31, 2012
1,674
2,190
28
Oh, sorry didn't realize it was you :eek: Anyway i have found the problem, snaplist disapears not because circle-helper is not recreating the snaplist on pagebeforeshow but because onReceiveCallback gets called after pagebeforeshow even more than once, so i swapped your circle-helper with mine and fired up updatesnaplist event at the end of onReceiveCallback. Sent the merge request.

And yes it is very incomplete and about the ListView, it has no js methods, none public at least. Here is the source for it.

Code:
    /*global window, define */
    /*
     * Copyright (c) 2015 Samsung Electronics Co., Ltd
     *
     * Licensed under the Flora License, Version 1.1 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://floralicense.org/license/
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    /*jslint nomen: true */
    /**
     * # Listview Widget
     * Shows a list view.
     *
     * The list widget is used to display, for example, navigation data, results, and data entries. The following table describes the supported list classes.
     *
     * ## Default selectors
     *
     * Default selector for listview widget is class *ui-listview*.
     *
     * To add a list widget to the application, use the following code:
     *
     * ### List with basic items
     *
     * You can add a basic list widget as follows:
     *
     *      @example
     *         <ul class="ui-listview">
     *             <li>1line</li>
     *             <li>2line</li>
     *             <li>3line</li>
     *             <li>4line</li>
     *             <li>5line</li>
     *         </ul>
     *
     * ### List with link items
     *
     * You can add a list widget with a link and press effect that allows the user to click each list item as follows:
     *
     *      @example
     *         <ul class="ui-listview">
     *             <li>
     *                 <a href="#">1line</a>
     *             </li>
     *             <li>
     *                 <a href="#">2line</a>
     *             </li>
     *             <li>
     *                 <a href="#">3line</a>
     *             </li>
     *             <li>
     *                 <a href="#">4line</a>
     *             </li>
     *             <li>
     *                 <a href="#">5line</a>
     *             </li>
     *         </ul>
     *
     * ## JavaScript API
     *
     * Listview widget hasn't JavaScript API.
     *
     * @class ns.widget.wearable.Listview
     * @extends ns.widget.BaseWidget
     */
    (function (document, ns) {
        "use strict";
        var BaseWidget = ns.widget.BaseWidget,
                engine = ns.engine,
                Listview = function () {
                },
                prototype = new BaseWidget();

        /**
         * Dictionary for listview related events.
         * For listview, it is an empty object.
         * @property {Object} events
         * @member ns.widget.wearable.Listview
         * @static
         */
        Listview.events = {};

        /**
         * Build Listview
         * @method _build
         * @param {HTMLElement} element
         * @return {HTMLElement}
         * @protected
         * @member ns.widget.wearable.Listview
         */
        prototype._build = function (element) {
            return element;
        };

        prototype._init = function (element) {
            return element;
        };

        prototype._bindEvents = function (element) {
            return element;
        };

        /**
         * Refresh structure
         * @method _refresh
         * @protected
         * @member ns.widget.wearable.Listview
         */
        prototype._refresh = function () {
            return null;
        };

        /**
         * Destroy widget
         * @method _destroy
         * @protected
         * @member ns.widget.wearable.Listview
         */
        prototype._destroy = function () {
            return null;
        };

        Listview.prototype = prototype;
        ns.widget.wearable.Listview = Listview;

        engine.defineWidget(
                "Listview",
                ".ui-listview",
                [],
                Listview,
                "wearable"
                );
    }(window.document, ns));

Thank you, I have looked at your code, edited some stuffs and merged :) The issue is indeed fixed
 
  • Like
Reactions: Rolbin

Redflea

Senior Member
Nov 23, 2009
1,970
495
This is really great, thanks for contributing to the gear community. Very cool.

I can't contribute any programming or help in that area at all, but I'd be happy to test things once you get to the point where you have an app I can sideload via normal processes on android. I think I can get Tizen studios loaded to put the app on my watch.

Oh, and one thing I've noticed, is that when replying to a group text on the watch you can't reply to everybody in the group, it just goes back to one person. With this app allow us to get around that limitation?

Sent from my SM-G935V using Tapatalk
 

jamesst20

Senior Member
Jan 31, 2012
1,674
2,190
28
This is really great, thanks for contributing to the gear community. Very cool.

I can't contribute any programming or help in that area at all, but I'd be happy to test things once you get to the point where you have an app I can sideload via normal processes on android. I think I can get Tizen studios loaded to put the app on my watch.

Oh, and one thing I've noticed, is that when replying to a group text on the watch you can't reply to everybody in the group, it just goes back to one person. With this app allow us to get around that limitation?

Sent from my SM-G935V using Tapatalk

Hi,

The process is very simple, for the Android App, you can run Android Studio, open the project and run it on your phone. It's the same process with Tizen Studio for the Gear S3 :)

As for group conversations, I must admit I have never done that by SMS and the current implementation will not even read those kind of conversations. However, I believe this is not something very hard to implement :) I would just need to figure out how I would display the names in such a small screen hehe. Maybe a scrolling test.

Thanks for the suggestion, let me know how your test attempt go :)

If it gets popular, I could consider once the application has more features to provide, to publish it on the store :)
 

Redflea

Senior Member
Nov 23, 2009
1,970
495
Hi,

The process is very simple, for the Android App, you can run Android Studio, open the project and run it on your phone. It's the same process with Tizen Studio for the Gear S3 :)

As for group conversations, I must admit I have never done that by SMS and the current implementation will not even read those kind of conversations. However, I believe this is not something very hard to implement :) I would just need to figure out how I would display the names in such a small screen hehe. Maybe a scrolling test.

Thanks for the suggestion, let me know how your test attempt go :)

If it gets popular, I could consider once the application has more features to provide, to publish it on the store :)

Thanks, installing Tizen Studio now.

Not sure - do I select a Tizen certificate or Samsung certificate (also using Tizen Studio to side-load the WatchMaker app on my watch).

As for the group SMS support, even if you could just show first names, that would work for 90% of people, I would think. Generally if you get a group SMS you're going to know the group from their first names by context pretty well...

Thanks.
 

10urshin

Senior Member
Jan 7, 2014
101
46
Thanks, installing Tizen Studio now.

Not sure - do I select a Tizen certificate or Samsung certificate (also using Tizen Studio to side-load the WatchMaker app on my watch).

As for the group SMS support, even if you could just show first names, that would work for 90% of people, I would think. Generally if you get a group SMS you're going to know the group from their first names by context pretty well...

Thanks.

Samsung certificate is required to deploy apps on commercial samsung devices. Tizen certificate is for non-samsung devices running tizen.
 
Last edited:

Redflea

Senior Member
Nov 23, 2009
1,970
495
Samsung certificate is required to deploy apps on commercial samsung devices. Tizen certificate is for non-samsung devices running tizen.

OK, thanks. almost have my Samsung distributor ceritificate done, but appears now I need my watches' DUID to complete the distributor certificate...not sure how I get that. I'm on a Win 10 laptop.

Can you point me at the process, doing some googling but things aren't clear.

Feeling like a doofus... ;)
 
Last edited:

10urshin

Senior Member
Jan 7, 2014
101
46
OK, thanks. almost have my Samsung distributor ceritificate done, but appears now I need my watches' DUID to complete the distributor certificate...not sure how I get that.

Can you point me at the process, doing some googling but things aren't clear.

Feeling like a doofus... ;)

It should auto copy your DUID if your watch is connected to pc using sdb by the time you are creating the distributor certificate. If it won't, Connect to your watch, open connection explorer in tizen studio, right click your watch -> properties -> others -> info there is your DUID.

https://goo.gl/photos/tL9gzzdVtk1cSvdf8
 

Redflea

Senior Member
Nov 23, 2009
1,970
495
It should auto copy your DUID if your watch is connected to pc using sdb by the time you are creating the distributor certificate. If it won't, Connect to your watch, open connection explorer in tizen studio, right click your watch -> properties -> others -> info there is your DUID.

https://goo.gl/photos/tL9gzzdVtk1cSvdf8

Yup - got it. THe watch wasn't connecting for quite a while at first, finally hooked up and fillled in the DUID in the certificate automatically. Sheesh!! :)

Thanks.
 

Redflea

Senior Member
Nov 23, 2009
1,970
495
Work is interfering w/life, unfortunately. Also need to install Android Studio to get to the companion app, then use Tizen to load this. :) Will give it a shot as soon as I can!
 

Top Liked Posts

  • There are no posts matching your filters.
  • 13
    Hi,

    I had the chance to try out the Samsung Gear S3 for few days. While this watch is amazing, probably my favorite as today, it sadly has no SMS Application built-in (For Non-Samsung phones), and no SMS Applications on the Samsung Gear Store nether.

    I made the project open source, as there is still rooms for improvements.

    Product page : https://gitlab.com/Jamesst20/SMSGear

    GitLab :
    U4ZyqPF.jpg
    1
    This is awesome,

    Hope it gains traction would love to be able to use this watch with textra
    1
    Thank you for the link, I was the one posting the solution on the thread you posted :) His implementation is different than mine, however, I would be very suprised that it makes a difference for the known issue, as the SnapLists are recreated on the refresh since there is a page change.

    Also, the rotarydetent listener is used to scroll sms in conversations (but not conversations list). The reason why is because the SnapList would scroll 1 element per element, making big messages unreadable. Also, it would make a weird scrolling feeling since it's not all list item that have the same height.

    It was my first Gear S3/Tizen project ever, maybe you have some knowledge to share :)

    Edit :

    The Samsung Documentation for Wearable is very very incomplete. Do you know if there are methods such as AddItem/RemoveItem, etc on the ListView ? https://developer.tizen.org/ko/deve...ml/ui_fw_api/wearable/widgets/widget_list.htm


    Oh, sorry didn't realize it was you :eek: Anyway i have found the problem, snaplist disapears not because circle-helper is not recreating the snaplist on pagebeforeshow but because onReceiveCallback gets called after pagebeforeshow even more than once, so i swapped your circle-helper with mine and fired up updatesnaplist event at the end of onReceiveCallback. Sent the merge request.

    And yes it is very incomplete and about the ListView, it has no js methods, none public at least. Here is the source for it.

    Code:
        /*global window, define */
        /*
         * Copyright (c) 2015 Samsung Electronics Co., Ltd
         *
         * Licensed under the Flora License, Version 1.1 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *     http://floralicense.org/license/
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */
        /*jslint nomen: true */
        /**
         * # Listview Widget
         * Shows a list view.
         *
         * The list widget is used to display, for example, navigation data, results, and data entries. The following table describes the supported list classes.
         *
         * ## Default selectors
         *
         * Default selector for listview widget is class *ui-listview*.
         *
         * To add a list widget to the application, use the following code:
         *
         * ### List with basic items
         *
         * You can add a basic list widget as follows:
         *
         *      @example
         *         <ul class="ui-listview">
         *             <li>1line</li>
         *             <li>2line</li>
         *             <li>3line</li>
         *             <li>4line</li>
         *             <li>5line</li>
         *         </ul>
         *
         * ### List with link items
         *
         * You can add a list widget with a link and press effect that allows the user to click each list item as follows:
         *
         *      @example
         *         <ul class="ui-listview">
         *             <li>
         *                 <a href="#">1line</a>
         *             </li>
         *             <li>
         *                 <a href="#">2line</a>
         *             </li>
         *             <li>
         *                 <a href="#">3line</a>
         *             </li>
         *             <li>
         *                 <a href="#">4line</a>
         *             </li>
         *             <li>
         *                 <a href="#">5line</a>
         *             </li>
         *         </ul>
         *
         * ## JavaScript API
         *
         * Listview widget hasn't JavaScript API.
         *
         * @class ns.widget.wearable.Listview
         * @extends ns.widget.BaseWidget
         */
        (function (document, ns) {
            "use strict";
            var BaseWidget = ns.widget.BaseWidget,
                    engine = ns.engine,
                    Listview = function () {
                    },
                    prototype = new BaseWidget();
    
            /**
             * Dictionary for listview related events.
             * For listview, it is an empty object.
             * @property {Object} events
             * @member ns.widget.wearable.Listview
             * @static
             */
            Listview.events = {};
    
            /**
             * Build Listview
             * @method _build
             * @param {HTMLElement} element
             * @return {HTMLElement}
             * @protected
             * @member ns.widget.wearable.Listview
             */
            prototype._build = function (element) {
                return element;
            };
    
            prototype._init = function (element) {
                return element;
            };
    
            prototype._bindEvents = function (element) {
                return element;
            };
    
            /**
             * Refresh structure
             * @method _refresh
             * @protected
             * @member ns.widget.wearable.Listview
             */
            prototype._refresh = function () {
                return null;
            };
    
            /**
             * Destroy widget
             * @method _destroy
             * @protected
             * @member ns.widget.wearable.Listview
             */
            prototype._destroy = function () {
                return null;
            };
    
            Listview.prototype = prototype;
            ns.widget.wearable.Listview = Listview;
    
            engine.defineWidget(
                    "Listview",
                    ".ui-listview",
                    [],
                    Listview,
                    "wearable"
                    );
        }(window.document, ns));
    1
    Oh, sorry didn't realize it was you :eek: Anyway i have found the problem, snaplist disapears not because circle-helper is not recreating the snaplist on pagebeforeshow but because onReceiveCallback gets called after pagebeforeshow even more than once, so i swapped your circle-helper with mine and fired up updatesnaplist event at the end of onReceiveCallback. Sent the merge request.

    And yes it is very incomplete and about the ListView, it has no js methods, none public at least. Here is the source for it.

    Code:
        /*global window, define */
        /*
         * Copyright (c) 2015 Samsung Electronics Co., Ltd
         *
         * Licensed under the Flora License, Version 1.1 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *     http://floralicense.org/license/
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */
        /*jslint nomen: true */
        /**
         * # Listview Widget
         * Shows a list view.
         *
         * The list widget is used to display, for example, navigation data, results, and data entries. The following table describes the supported list classes.
         *
         * ## Default selectors
         *
         * Default selector for listview widget is class *ui-listview*.
         *
         * To add a list widget to the application, use the following code:
         *
         * ### List with basic items
         *
         * You can add a basic list widget as follows:
         *
         *      @example
         *         <ul class="ui-listview">
         *             <li>1line</li>
         *             <li>2line</li>
         *             <li>3line</li>
         *             <li>4line</li>
         *             <li>5line</li>
         *         </ul>
         *
         * ### List with link items
         *
         * You can add a list widget with a link and press effect that allows the user to click each list item as follows:
         *
         *      @example
         *         <ul class="ui-listview">
         *             <li>
         *                 <a href="#">1line</a>
         *             </li>
         *             <li>
         *                 <a href="#">2line</a>
         *             </li>
         *             <li>
         *                 <a href="#">3line</a>
         *             </li>
         *             <li>
         *                 <a href="#">4line</a>
         *             </li>
         *             <li>
         *                 <a href="#">5line</a>
         *             </li>
         *         </ul>
         *
         * ## JavaScript API
         *
         * Listview widget hasn't JavaScript API.
         *
         * @class ns.widget.wearable.Listview
         * @extends ns.widget.BaseWidget
         */
        (function (document, ns) {
            "use strict";
            var BaseWidget = ns.widget.BaseWidget,
                    engine = ns.engine,
                    Listview = function () {
                    },
                    prototype = new BaseWidget();
    
            /**
             * Dictionary for listview related events.
             * For listview, it is an empty object.
             * @property {Object} events
             * @member ns.widget.wearable.Listview
             * @static
             */
            Listview.events = {};
    
            /**
             * Build Listview
             * @method _build
             * @param {HTMLElement} element
             * @return {HTMLElement}
             * @protected
             * @member ns.widget.wearable.Listview
             */
            prototype._build = function (element) {
                return element;
            };
    
            prototype._init = function (element) {
                return element;
            };
    
            prototype._bindEvents = function (element) {
                return element;
            };
    
            /**
             * Refresh structure
             * @method _refresh
             * @protected
             * @member ns.widget.wearable.Listview
             */
            prototype._refresh = function () {
                return null;
            };
    
            /**
             * Destroy widget
             * @method _destroy
             * @protected
             * @member ns.widget.wearable.Listview
             */
            prototype._destroy = function () {
                return null;
            };
    
            Listview.prototype = prototype;
            ns.widget.wearable.Listview = Listview;
    
            engine.defineWidget(
                    "Listview",
                    ".ui-listview",
                    [],
                    Listview,
                    "wearable"
                    );
        }(window.document, ns));

    Thank you, I have looked at your code, edited some stuffs and merged :) The issue is indeed fixed
    1
    Yup - got it. THe watch wasn't connecting for quite a while at first, finally hooked up and fillled in the DUID in the certificate automatically. Sheesh!! :)

    Thanks.
    Any comments on the application :)?

    Envoyé de mon ONEPLUS A3000 en utilisant Tapatalk